資源簡介
設計一個交通咨詢系統,能讓旅客咨詢從任一城市頂點到另一城市頂點之間的最短路徑(里程)或最低花費或最少時間等問題。對于不同咨詢要求,可輸入城市間的路程或所需時間或所需費用。
完成功能的詳細說明:
1.創建圖的存儲結構使用鄰接矩陣。
2.查詢分為兩類。一類是能讓旅客咨詢從一個城市到另外所有城市的最短路徑(要求使用迪杰斯特拉算法),顯示出所有路徑,按升序排列。第二類是任意兩個城市間的最短路徑(要求使用弗洛伊德算法),顯示最短路徑。
代碼片段和文件信息
#include
#include
#include
#define?VertexType?int
#define?MAXSIZE?26
#define?MAXCOST?10000
#define?INFINITY?999999
using?namespace?std;
typedef?struct{
??int?length;
??int?time;
??int?fee;
}edge_info;
typedef?struct{
??VertexType?vex[MAXSIZE];
??edge_info?edges[MAXSIZE][MAXSIZE];
??int?vexnumedgenum;
}MGraph;
void?cities(int?m){
switch(m){
??case?1:cout<<“北京“;break;
??case?2:cout<<“長春“;break;
??case?3:cout<<“成都“;break;
??????case?4:cout<<“大連“;break;
??case?5:cout<<“福州“;break;
??case?6:cout<<“廣州“;break;
??case?7:cout<<“貴陽“;break;
??case?8:cout<<“哈爾濱“;break;
??case?9:cout<<“呼和浩特“;break;
??case?10:cout<<“昆明“;break;
??case?11:cout<<“蘭州“;break;
??case?12:cout<<“柳州“;break;
??case?13:cout<<“南昌“;break;
??case?14:cout<<“南寧“;break;
??case?15:cout<<“上海“;break;
??case?16:cout<<“沈陽“;break;
??case?17:cout<<“深圳“;break;
??case?18:cout<<“天津“;break;
??case?19:cout<<“武漢“;break;
??case?20:cout<<“烏魯木齊“;break;
??case?21:cout<<“西安“;break;
??case?22:cout<<“西寧“;break;
??case?23:cout<<“徐州“;break;
??case?24:cout<<“鄭州“;break;
??case?25:cout<<“株洲“;break;
??default:cout<<“錯誤,系統無此城市!“;break;
}
}
void?CreatMGraph(MGraph?*G){
????int?ijktfs;
ifstream?infile;
infile.open(“C:\\交通系統數據.txt“ios::in|ios::out);
if(!infile){
??cerr<<“打開‘交通系統數據.txt’文件失敗!“< ??infile.close();
??return;
}
infile>>G->edgenum>>G->vexnum;
for(i=1;i<=G->vexnum;i++)
G->vex[i]=i;
for(i=0;i<=G->vexnum;i++){
for(j=0;j<=G->vexnum;j++){
???G->edges[i][j].length=INFINITY;
???G->edges[i][j].time=INFINITY;
???G->edges[i][j].fee=INFINITY;
????}
}
for(s=0;sedgenum;s++){
???infile>>i>>j>>f>>t>>k;
???G->edges[i][j].fee=f;
???G->edges[j][i].fee=f; ??
???G->edges[i][j].time=t;
???G->edges[j][i].time=t;
???G->edges[i][j].length=k;
???G->edges[j][i].length=k;
}
infile.close();
}
void?window()
{?
cout<<“\n\n\t\t*****************交通查詢系統*******************\n\n“;
cout<<“1:北京??2:長春??3:成都??4:大連??5:福州??6:廣州??7:貴陽??8:哈爾濱??9:呼和浩特\n“;
cout<<“10:昆明??11:蘭州??12:柳州??13:南昌??14:南寧??15:上海??16:沈陽??17:深圳?\n“;?
cout<<“18:天津??19:武漢??20:烏魯木齊??21:西安??22:西寧??23:徐州??24:鄭州??25:株州\n“;
?}
void?shortestpath1(MGraph?*Gint?v0int?n){
int?kl;
int?min;
int?e[MAXSIZE][MAXSIZE];
int?ijvpre;
????int?p[30]d[30];
????int?final[30]shuchu[30];
switch(n){
??case?1:for(k=0;k ?for(l=0;l ?if(G->edges[k][l].length ?????????e[k][l]=G->edges[k][l].length;
?else?e[k][l]=INFINITY;
?}
??break;
??case?2:for(k=0;k ?for(l=0;l ?if(G->edges[k][l].length ?????????e[k][l]=G->edges[k][l].time;
?else?e[k][l]=INFINITY;
?}
??break;
??case?3:for(k=0;k ?for(l=0;l ?if(G->edges[k][l].length ?????????e[k][l]=G->edges[k][l].fee;
?else?e[k][l]=INFINITY;
?}
??break;
??default:cou
評論
共有 條評論