@w616561153
2020-06-20T17:22:32.000000Z
字数 5192
阅读 549
物联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;
else
cout << "源点到" << 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;
}
输出结果: