@w616561153
2020-06-20T09:22:32.000000Z
字数 5192
阅读 653
物联1802王恪楠 2018000948
#include <bits/stdc++.h>#define LIST_INIT_SIZE 10050 //线性表存储空间的初始分配量using namespace std;typedef struct{char word[50]; //存储单词,不超过20个字符int count; //单词出现的次数}ElemType;typedef struct{ElemType elem[LIST_INIT_SIZE]; //存储空间基址int length; //当前长度int listsize; //当前分配的存储容量}SqList;void InitList(SqList &L){L.length = 0;L.listsize = 0;return;}int LocateElem(SqList &L,char *s){int &len = L.length;for(int i = 1; i <= len; i ++){//cout << now -> word << " " << s << endl;if(!strcmp(L.elem[i].word, s)){L.elem[i].count ++;return 0;}if(strcmp(L.elem[i].word, s) == 1){len ++;return i;}}return ++ len;}void InsertList(SqList &L, int pos, char *s){int &len = L.length;//for(int i = len - 1; i >= pos; i --){L.elem[i + 1] = L.elem[i];}strcpy((L.elem + pos) -> word, s);(L.elem + pos) -> count = 1;L.listsize += sizeof(ElemType);return;}void PrintList(SqList &L){cout << "这篇文章的单词出现情况如下:" << endl << endl;cout << setw(20) << "单词" << setw(10) << "次数" << endl;for(int i = 1; i <= L.length; i ++){ElemType *now = L.elem + i;cout << setw(20) << (now -> word) << setw(10) << (now -> count) << endl;}return;}int main(){char s[500];char file_name[500];cout << "请输入文件名:" << endl;cin >> file_name;freopen(file_name, "r", stdin);SqList L;InitList(L);while(cin >> s){if(s[strlen(s) - 1] == '.' || s[strlen(s) - 1] == ',' || s[strlen(s) - 1] == '"' || s[strlen(s) - 1] == ')' )s[strlen(s) - 1] = 0;if(s[0] == '(' || s[0] == '"')for(int i = 0; i < strlen(s) - 1; i ++)s[i] = s[i + 1];int flag = 0;for(int i = 0; i < strlen(s); i ++){if(!(('A' <= s[i] && s[i] <= 'Z') || ('a' <= s[i] && s[i] <= 'z')))flag = 1;}if(!flag){int pos = LocateElem(L, s);if(pos)InsertList(L, pos, s);}}PrintList(L);return 0;}
输出结果:

#include <bits/stdc++.h>using namespace std;struct Node{int num, time;int ru; //1 进入 0 退出bool operator < (const Node &i) const{ //重载小于号,以便下面调用sort函数对v排序,return time < i.time;}};vector<Node> v; //stl 向量 栈 队列stack<int> s0, s1;queue<int> q;int main(){int n, m;cin >> n; //读入。for(; 1;){char ch;int t1, t2;cin >> ch >> t1 >> t2;if(ch == 'E') break;v.push_back(Node{t1, t2, ch == 'A'});}sort(v.begin(), v.end()); //对v进行排序,以便下面按时间先后进行操作。for(auto x : v){if(x.ru){ //到达停车场。if(s0.size() == n)q.push(x.num);else{s0.push(x.num);cout << x.num << " Arrival " << x.time << endl;}}else{ //退出停车场。while(1){int now = s0.top(); s0.pop(); //先从停车场退出来。cout << now << " Departure " << x.time << endl;if(now == x.num) break; //塞进缓冲区。s1.push(now);}while(!s1.empty()){cout << s1.top() << " Arrival " << x.time << endl;s0.push(s1.top());//从缓冲区再往里开。s1.pop();}if(!q.empty()){cout << q.front() << " Arrival " << x.time << endl;s0.push(q.front()); //等候区进去一辆车。q.pop();}}}return 0;}
输出结果:

#include <bits/stdc++.h>using namespace std;typedef pair<int, int> Pii;const int MAXN = 1e3 + 50;const int INF = 0x3f3f3f3f;int e[MAXN][MAXN]; //邻接矩阵存图。int d[MAXN], n, m;void init(){memset(e, INF, sizeof(e));for(int i = 1; i <= n; i ++)e[i][i] = 0;return;}void dijsktra(int s){priority_queue<Pii, vector<Pii>, greater<Pii> > q; //小根优先队列。for(int i = 1; i <= n; i ++) //初始化dis数组。d[i] = INF;d[s] = 0;q.push(Pii(0, s));while(!q.empty()){Pii p = q.top(); q.pop(); //找到dis值最小的。int v = p.second;if(d[v] < p.first) continue; //如果已经在优先队列里或者被松弛成更优解的,就不用再松弛了。for(int i = 1; i <= n; i ++){ //找边。if(i == v || e[v][i] == INF) continue;if(d[i] > d[v] + e[v][i]){ //松弛。d[i] = d[v] + e[v][i];q.push(Pii(d[i], i));}}}return;}void floyd(){for(int k = 1; k <= n; k ++)for(int i = 1; i <= n; i ++)for(int j = 1; j <= n; j ++)e[i][j] = min(e[i][j], e[i][k] + e[k][j]);return;}int main(){cout << "请输入点数与边数:" << endl;cin >> n >> m;init();for(int i = 0; i < m; i ++){int t1, t2, t3;cin >> t1 >> t2 >> t3;e[t1][t2] = t3;}cout << "单源最短路还是多源最短路? a单源最短路, b多源最短路。";char ch;cin >> ch;if(ch == 'a'){cout << "源点是:";int s;cin >> s;dijsktra(s);for(int i = 1; i <= n; i ++){if(i == s) continue;if(d[i] == INF)cout << "源点无法到" << i << "点" << endl;elsecout << "源点到" << i << "点的最短距离是" << d[i] << endl;}}else{floyd();for(int i = 1; i <= n; i ++)for(int j = 1; j <= n; j ++){if(i == j || e[i][j] == INF) continue;cout << i << "点到" << j << "点的最短距离是" << e[i][j] << endl;}}return 0;}
输出结果:

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