题0
来源:互联网 发布:淘宝个人信用等级提高 编辑:程序博客网 时间:2024/06/07 05:39
#define Hello 10000 #define Max_Vertex_Num 40 #define MAX 40 #include<cstdlib> #include<cstring> #include <iostream> using namespace std; #include <iomanip> typedef struct Load { int adj; } Load,AdjMatrix[Max_Vertex_Num][Max_Vertex_Num]; typedef struct { char name[30]; int num; }infotype; typedef struct { infotype vexs[Max_Vertex_Num]; AdjMatrix arcs; int vexnum,arcnum; } MGraph; MGraph b; MGraph InitGraph(void); void Menu(void); void Browser(MGraph *G); void Dijk(MGraph * G); void Floyd(MGraph *G); void main(void) { system("mode con: cols=100 lines=40"); int i; b=InitGraph(); Menu(); cin>>i; while(i!=5) { switch(i) { case 1:system("cls"); Browser(&b); Menu(); break; case 2:system("cls"); Dijk(&b); Menu(); break; case 3:system("cls"); Floyd(&b); Menu(); break; case 4:exit(1); break; default:break; } cin>>i; } } MGraph InitGraph(void) { MGraph G; int i,j; G.vexnum=14; G.arcnum=17; for(i=0;i<G.vexnum;i++) G.vexs[i].num=i; strcpy(G.vexs[0].name,"学校大门 "); strcpy(G.vexs[1].name,"蝴蝶湖 "); strcpy(G.vexs[2].name,"教学主楼 "); strcpy(G.vexs[3].name,"钟海楼 "); strcpy(G.vexs[4].name,"中心广场 "); strcpy(G.vexs[5].name,"图书馆 "); strcpy(G.vexs[6].name,"学生第三饭堂"); strcpy(G.vexs[7].name,"中区宿舍楼 "); strcpy(G.vexs[8].name,"西湖"); strcpy(G.vexs[9].name,"西区宿舍楼"); strcpy(G.vexs[10].name,"商业中心"); strcpy(G.vexs[11].name,"学生第一饭堂"); strcpy(G.vexs[12].name,"东区足球场 "); strcpy(G.vexs[13].name,"溜冰场" ); for(i=0;i<G.vexnum;i++) for(j=0;j<G.vexnum;j++) G.arcs[i][j].adj=Hello; G.arcs[0][1].adj=50; G.arcs[0][2].adj=100; G.arcs[1][3].adj=120; G.arcs[1][5].adj=120; G.arcs[1][6].adj=80; G.arcs[0][6].adj=200;; G.arcs[2][3].adj=30; G.arcs[2][5].adj=60; G.arcs[3][4].adj=10; G.arcs[4][11].adj=100; G.arcs[5][6].adj=50; G.arcs[6][7].adj=20; G.arcs[7][8].adj=70; G.arcs[8][9].adj=140; G.arcs[9][10].adj=600; G.arcs[10][12].adj=250; G.arcs[11][12].adj=200; for(i=0;i<G.vexnum;i++) for(j=0;j<G.vexnum;j++) G.arcs[j][i].adj=G.arcs[i][j].adj; return G; } void Menu() { cout<<" Welcome To 广东海洋大学 "<<endl;cout<<" 请选择能为您做到的服务: "<<endl;cout<<" 1.浏览各景点 "<<endl; cout<<" 2.查看所有游览路线 "<<endl;cout<<" 3.选择出发点和目的地 "<<endl; cout<<" 4.退出系统 "<<endl; cout<<" 请选择能为您做到的服务: "; } void Browser(MGraph *G) { int v; cout<<"┃编号┃景点名称 "<<endl; for(v=0;v<G->vexnum;v++) cout<<"("<<G->vexs[v].num<<")"<<G->vexs[v].name<<endl; } void Dijk(MGraph * G) { int v,w,i,min,t=0,x,flag=1,v0; int final[20], D[20], p[20][20]; cout<<"┃编号┃景点名称 "<<endl; for(v=0;v<G->vexnum;v++) cout<<"┃"<<G->vexs[v].num<<"┃"<<G->vexs[v].name<<endl; while(flag) { cout<<"请输入一个起始景点编号:"; cin>>v0; if(v0<0||v0>G->vexnum) { cout<<"景点编号不存在!请重新输入景点编号:"; cin>>v0; } if(v0>=0&&v0<G->vexnum) flag=0; } for(v=0;v<G->vexnum;v++) { final[v]=0; D[v]=G->arcs[v0][v].adj; for(w=0;w<G->vexnum;w++) p[v][w]=0; if(D[v]<Hello) { p[v][v0]=1;p[v][v]=1; } } D[v0]=0;final[v0]=1; for(i=1;i<G->vexnum;i++) { min=Hello; for(w=0;w<G->vexnum;w++) if(!final[w]) if(D[w]<min){v=w;min=D[w];} final[v]=1; for(w=0;w<G->vexnum;w++) if(!final[w]&&(min+G->arcs[v][w].adj<D[w])) { D[w]=min+G->arcs[v][w].adj; for(x=0;x<G->vexnum;x++) p[w][x]=p[v][x]; p[w][w]=1; } } for(v=0;v<G->vexnum;v++) { if(v0!=v) cout<<G->vexs[v0].name; for(w=0;w<G->vexnum;w++) { if(p[v][w]&&w!=v0) cout<<"-->"<<G->vexs[w].name; t++; } if(t>G->vexnum-1&&v0!=v) cout<<" 这是最短路线,总长为:"<<D[v]<<"米"<<endl; } } void Floyd(MGraph *G) { int v,u,i,w,k,j,flag=1,p[14][14][14],D[14][14]; cout<<"┃编号┃景点名称 "<<endl; for(v=0;v<G->vexnum;v++) cout<<"┃"<<G->vexs[v].num<<"┃"<<G->vexs[v].name<<endl; for(v=0;v<G->vexnum;v++) for(w=0;w<G->vexnum;w++) { D[v][w]=G->arcs[v][w].adj; for(u=0;u<G->vexnum;u++) p[v][w][u]=0; if(D[v][w]<Hello) { p[v][w][v]=1;p[v][w][w]=1; } } for(u=0;u<G->vexnum;u++) for(v=0;v<G->vexnum;v++) for(w=0;w<G->vexnum;w++) if(D[v][u]+D[u][w]<D[v][w]) { D[v][w]=D[v][u]+D[u][w]; for(i=0;i<G->vexnum;i++) p[v][w][i]=p[v][u][i]||p[u][w][i]; } while(flag) { cout<<"请输入您当前的位置和目的地的编号(用空格隔开):"; cin>>k>>j; if(k<0||k>G->vexnum||j<0||j>G->vexnum) { cout<<"景点编号不存在!请重新输入出发点和目的地的编号:"; cin>>k>>j; } if(k>=0&&k<G->vexnum&&j>=0&&j<G->vexnum) flag=0; } cout<<G->vexs[k].name;for(u=0;u<G->vexnum;u++) if(p[k][j][u]&&k!=u&&j!=u) cout<<"-->"<<G->vexs[u].name;cout<<"-->"<<G->vexs[j].name<<endl;cout<<" 这是最短路线,总长为:"<<D[k][j]<<"米"<<endl; }
0 0
- 题0
- pythonchallenge 【第0题】
- PythonChallenge第0题
- USACO 刷题调试0
- 第0题 课程程序设计
- oj2.0 判题流程
- 题0:海大交通图
- 0-1背包模板题
- 0/1背包问题(一道编程题)
- 【刷题小记84】阶乘的0
- 和0排序-Google笔试题
- 输出成绩(第三章第六题0
- 0-1背包问题----最基础题
- A题之字符串末尾补0
- 用flashAS3.0做一个连线题
- 【原创】pythonchalleng——第0题
- 《算法导论》课后题--0--第一章
- 【算法题】0-1 背包问题
- 设计模式——代码的规范
- 三层—登录窗体
- 基于opencv的摄像头脸部识别抓取及格式储存(python)
- Rotate Image
- 【POJ2975】Nim 博弈
- 题0
- openwrt下将lan口变为wan方法
- 从零开始4-ubuntu学习笔记
- 获取qq音乐歌手的收听量(c#)
- Myeclipse上配置weblogic11g(10.3.6)的方法教程
- 简单优化:Zipalign
- C#对Access数据库的增删改查
- 某研究所招聘评分指标?
- 数据结构课程设计——编码与译码