[关闭]
@w616561153 2020-06-20T17:22:32.000000Z 字数 5192 阅读 549

王恪楠20物联网课设代码

物联1802王恪楠 2018000948


1单词统计

  1. #include <bits/stdc++.h>
  2. #define LIST_INIT_SIZE 10050 //线性表存储空间的初始分配量
  3. using namespace std;
  4. typedef struct{
  5. char word[50]; //存储单词,不超过20个字符
  6. int count; //单词出现的次数
  7. }ElemType;
  8. typedef struct{
  9. ElemType elem[LIST_INIT_SIZE]; //存储空间基址
  10. int length; //当前长度
  11. int listsize; //当前分配的存储容量
  12. }SqList;
  13. void InitList(SqList &L)
  14. {
  15. L.length = 0;
  16. L.listsize = 0;
  17. return;
  18. }
  19. int LocateElem(SqList &L,char *s)
  20. {
  21. int &len = L.length;
  22. for(int i = 1; i <= len; i ++){
  23. //cout << now -> word << " " << s << endl;
  24. if(!strcmp(L.elem[i].word, s)){
  25. L.elem[i].count ++;
  26. return 0;
  27. }
  28. if(strcmp(L.elem[i].word, s) == 1){
  29. len ++;
  30. return i;
  31. }
  32. }
  33. return ++ len;
  34. }
  35. void InsertList(SqList &L, int pos, char *s)
  36. {
  37. int &len = L.length;
  38. //
  39. for(int i = len - 1; i >= pos; i --){
  40. L.elem[i + 1] = L.elem[i];
  41. }
  42. strcpy((L.elem + pos) -> word, s);
  43. (L.elem + pos) -> count = 1;
  44. L.listsize += sizeof(ElemType);
  45. return;
  46. }
  47. void PrintList(SqList &L)
  48. {
  49. cout << "这篇文章的单词出现情况如下:" << endl << endl;
  50. cout << setw(20) << "单词" << setw(10) << "次数" << endl;
  51. for(int i = 1; i <= L.length; i ++){
  52. ElemType *now = L.elem + i;
  53. cout << setw(20) << (now -> word) << setw(10) << (now -> count) << endl;
  54. }
  55. return;
  56. }
  57. int main()
  58. {
  59. char s[500];
  60. char file_name[500];
  61. cout << "请输入文件名:" << endl;
  62. cin >> file_name;
  63. freopen(file_name, "r", stdin);
  64. SqList L;
  65. InitList(L);
  66. while(cin >> s){
  67. if(s[strlen(s) - 1] == '.' || s[strlen(s) - 1] == ',' || s[strlen(s) - 1] == '"' || s[strlen(s) - 1] == ')' )
  68. s[strlen(s) - 1] = 0;
  69. if(s[0] == '(' || s[0] == '"')
  70. for(int i = 0; i < strlen(s) - 1; i ++)
  71. s[i] = s[i + 1];
  72. int flag = 0;
  73. for(int i = 0; i < strlen(s); i ++){
  74. if(!(('A' <= s[i] && s[i] <= 'Z') || ('a' <= s[i] && s[i] <= 'z')))
  75. flag = 1;
  76. }
  77. if(!flag){
  78. int pos = LocateElem(L, s);
  79. if(pos)
  80. InsertList(L, pos, s);
  81. }
  82. }
  83. PrintList(L);
  84. return 0;
  85. }

输出结果:
图片1.png

2停车场管理

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct Node
  4. {
  5. int num, time;
  6. int ru; //1 进入 0 退出
  7. bool operator < (const Node &i) const{ //重载小于号,以便下面调用sort函数对v排序,
  8. return time < i.time;
  9. }
  10. };
  11. vector<Node> v; //stl 向量 栈 队列
  12. stack<int> s0, s1;
  13. queue<int> q;
  14. int main()
  15. {
  16. int n, m;
  17. cin >> n; //读入。
  18. for(; 1;){
  19. char ch;
  20. int t1, t2;
  21. cin >> ch >> t1 >> t2;
  22. if(ch == 'E') break;
  23. v.push_back(Node{t1, t2, ch == 'A'});
  24. }
  25. sort(v.begin(), v.end()); //对v进行排序,以便下面按时间先后进行操作。
  26. for(auto x : v){
  27. if(x.ru){ //到达停车场。
  28. if(s0.size() == n)
  29. q.push(x.num);
  30. else{
  31. s0.push(x.num);
  32. cout << x.num << " Arrival " << x.time << endl;
  33. }
  34. }
  35. else{ //退出停车场。
  36. while(1){
  37. int now = s0.top(); s0.pop(); //先从停车场退出来。
  38. cout << now << " Departure " << x.time << endl;
  39. if(now == x.num) break; //塞进缓冲区。
  40. s1.push(now);
  41. }
  42. while(!s1.empty()){
  43. cout << s1.top() << " Arrival " << x.time << endl;
  44. s0.push(s1.top());//从缓冲区再往里开。
  45. s1.pop();
  46. }
  47. if(!q.empty()){
  48. cout << q.front() << " Arrival " << x.time << endl;
  49. s0.push(q.front()); //等候区进去一辆车。
  50. q.pop();
  51. }
  52. }
  53. }
  54. return 0;
  55. }

输出结果:
图片2.png

3交通咨询系统设计

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. typedef pair<int, int> Pii;
  4. const int MAXN = 1e3 + 50;
  5. const int INF = 0x3f3f3f3f;
  6. int e[MAXN][MAXN]; //邻接矩阵存图。
  7. int d[MAXN], n, m;
  8. void init()
  9. {
  10. memset(e, INF, sizeof(e));
  11. for(int i = 1; i <= n; i ++)
  12. e[i][i] = 0;
  13. return;
  14. }
  15. void dijsktra(int s)
  16. {
  17. priority_queue<Pii, vector<Pii>, greater<Pii> > q; //小根优先队列。
  18. for(int i = 1; i <= n; i ++) //初始化dis数组。
  19. d[i] = INF;
  20. d[s] = 0;
  21. q.push(Pii(0, s));
  22. while(!q.empty()){
  23. Pii p = q.top(); q.pop(); //找到dis值最小的。
  24. int v = p.second;
  25. if(d[v] < p.first) continue; //如果已经在优先队列里或者被松弛成更优解的,就不用再松弛了。
  26. for(int i = 1; i <= n; i ++){ //找边。
  27. if(i == v || e[v][i] == INF) continue;
  28. if(d[i] > d[v] + e[v][i]){ //松弛。
  29. d[i] = d[v] + e[v][i];
  30. q.push(Pii(d[i], i));
  31. }
  32. }
  33. }
  34. return;
  35. }
  36. void floyd()
  37. {
  38. for(int k = 1; k <= n; k ++)
  39. for(int i = 1; i <= n; i ++)
  40. for(int j = 1; j <= n; j ++)
  41. e[i][j] = min(e[i][j], e[i][k] + e[k][j]);
  42. return;
  43. }
  44. int main()
  45. {
  46. cout << "请输入点数与边数:" << endl;
  47. cin >> n >> m;
  48. init();
  49. for(int i = 0; i < m; i ++){
  50. int t1, t2, t3;
  51. cin >> t1 >> t2 >> t3;
  52. e[t1][t2] = t3;
  53. }
  54. cout << "单源最短路还是多源最短路? a单源最短路, b多源最短路。";
  55. char ch;
  56. cin >> ch;
  57. if(ch == 'a'){
  58. cout << "源点是:";
  59. int s;
  60. cin >> s;
  61. dijsktra(s);
  62. for(int i = 1; i <= n; i ++){
  63. if(i == s) continue;
  64. if(d[i] == INF)
  65. cout << "源点无法到" << i << "点" << endl;
  66. else
  67. cout << "源点到" << i << "点的最短距离是" << d[i] << endl;
  68. }
  69. }
  70. else{
  71. floyd();
  72. for(int i = 1; i <= n; i ++)
  73. for(int j = 1; j <= n; j ++){
  74. if(i == j || e[i][j] == INF) continue;
  75. cout << i << "点到" << j << "点的最短距离是" << e[i][j] << endl;
  76. }
  77. }
  78. return 0;
  79. }

输出结果:
图片4.png
图片3.png

4校园导游服务咨询系统

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int INF = 0x3f3f3f3f;
  4. struct Node
  5. {
  6. string name, instruction;
  7. int id;
  8. };
  9. int e[20][20];
  10. void init()
  11. {
  12. memset(e, INF, sizeof(e));
  13. for(int i = 1; i <= 10; i ++)
  14. e[i][i] = 0;
  15. return;
  16. }
  17. void add_edge(int u, int v, int w)
  18. { // 无向边。
  19. e[u][v] = w;
  20. e[v][u] = w;
  21. return;
  22. }
  23. void floyd()
  24. {//直接弗洛伊德就完事了。
  25. for(int k = 1; k <= 10; k ++)
  26. for(int i = 1; i <= 10; i ++)
  27. for(int j = 1; j <= 10; j ++)
  28. e[i][j] = min(e[i][j], e[i][k] + e[k][j]);
  29. return;
  30. }
  31. void Menu() //图形界面
  32. {
  33. printf("\n 太原理工大学明向校区导游图\n");
  34. printf(" ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
  35. printf(" ┃ 1.查看景点信息 ┃\n");
  36. printf(" ┃ 2.确定两景点之间最短距离 ┃\n");
  37. printf(" ┃ 3.退出导游系统 ┃\n");
  38. printf(" ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
  39. return;
  40. }
  41. int main()
  42. {
  43. Node v[20] = {{"", "", 0}, {"南门", "古朴典雅,皇家理工的标志性象征。", 1}, {"西门", "充满生活气息,流动商贩的聚集之地。", 2},
  44. {"东门", "对着中医药大学。", 3}, {"东区食堂", "清韵轩,食堂是一座现代化的建筑,一共有五层,建筑风格跟明向校区的整体风格协调一致,显现出高调大气上档次的感觉,室内风格新颖华丽,有专门的电梯上下,极大的减轻的学生的l劳累,方便了学生的就餐,可同时容纳8000人就餐。", 4}, {"西区食堂", "四层,可以吃饭,可以买水。", 5},
  45. {"北区食堂", "两层,教职工食堂和学生食堂的结合,现已重新装修,价格暴涨。", 6}, {"明向超市", "超市里的商品 琳琅满目,每天都有特价商品打折,是我们明向校区学生下课悠闲的 好去处。", 7}, {"教学楼", "教学楼建筑风格有点结合三晋文化跟欧洲建筑的有机组成,气势文雅优美,给视觉带来一种享受。", 8}, {"图书馆", "号称华北地区最大的图书馆。现在只有两层有书。", 9}, {"操场", "两个操场,可以举办校运动会等大型活动。", 10}};
  46. init();
  47. add_edge(1, 2, 3);
  48. add_edge(1, 3, 2);
  49. add_edge(2, 3, 5);
  50. add_edge(3, 4, 3);
  51. add_edge(2, 5, 3);
  52. floyd();
  53. while(1){ //循环界面。
  54. Menu();
  55. int t;
  56. cin >> t;
  57. if(t == 3) break;
  58. if(t == 1){
  59. cout << "请选择查看景点:\n";
  60. for(int i = 1; i <= 10; i ++)
  61. cout << i << " " << v[i].name << endl;
  62. cout << "11 返回" << endl;
  63. cin >> t;
  64. if(t == 11) continue;
  65. cout << v[t].instruction << endl;
  66. }
  67. else{
  68. for(int i = 1; i <= 10; i ++)
  69. cout << i << " " << v[i].name << endl;
  70. cout <<"请输入起点终点的编号:\n";
  71. int t1, t2;
  72. cin >> t1 >> t2;
  73. if(e[t1][t2] == INF) cout << v[t1].name << "无法到达" << v[t2].name << endl;
  74. else cout << v[t1].name << "与" << v[t2].name << "的最短距离是" << e[t1][t2] << endl;
  75. }
  76. }
  77. return 0;
  78. }

输出结果:
图片5.png

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注