数据结构——全国交通咨询模拟系统实验报告5

精品

G->cost[6][7]=G->cost[7][6]=60;

if (o) { while(h==1)//h初始值为1 { v=v+1;//V为全局静态变量,初始值为0 ,v表示编辑的火车花费的组数,三个编辑数组中的存放代码 pri(); cout<<\火车花费编辑\ cout<<\请输入开始城市的代码\ cin>>a; cout<<\请输入目的城市的代码\ cin>>b; cout<<\请输入你的两地花费\ cin>>m[v].ccost; n[v].ccost=a; x[v].ccost=b; cout<<\请选择\ cout<<\ cout<<\:继续更改城市费用\ cout<<\返回上一级菜单\ cout<<\ cin>>h; switch(h) { case 1: h=1; break; case 0: h=0; break; default:{ cout<<\选择出错\ } } } }

f=v+1;//初始定义变量f为1,全局变量v为0,即1=0+1 while (v++) //v++代表的意思 { G->cost[n[v].ccost][x[v].ccost]=m[v].ccost; } v=f;

精品

return(G); }

//构造TimeG图,表示其花费时间

unDiGraph *CreateTimeG(int o)//火车的时间的存贮和编辑功能 { unDiGraph *G; int i,j;//循环变量 int a=0,b=0,f,h=1;//a,b 表增加城市的代码 if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph)))) //为G分配存储空间。 { return(NULL); } for(i=1;i<=cnumber+1;i++) { for(j=1;j<=cnumber+1;j++) { G->cost[i][j]=INF;//初始化使G->cost[i][j]为无穷。 } } G->numV=cnumber;

G->cost[1][6]=G->cost[6][1]=9; G->cost[1][2]=G->cost[2][1]=8; G->cost[2][3]=G->cost[3][2]=5; G->cost[2][5]=G->cost[5][2]=3; G->cost[3][4]=G->cost[4][3]=5; G->cost[4][5]=G->cost[5][4]=4; G->cost[4][7]=G->cost[7][5]=6; G->cost[5][6]=G->cost[6][5]=9; G->cost[5][7]=G->cost[7][5]=6; G->cost[6][7]=G->cost[7][6]=6;

if (o) { while(h==1) { z=z+1;//全局静态变量,初始值为0.即1=0+1 pri(); cout<<\火车时间编辑\ cout<<\请输入开始城市的代码\ cin>>a; cout<<\请输入结尾城市的代码\ cin>>b; cout<<\请输入你的两地时间\ cin>>m[z].ctime; n[z].ctime=a;

精品

x[z].ctime=b; cout<<\请选择\ cout<<\ cout<<\:继续更改城市时间\ cout<<\返回上一级菜单\ cout<<\ cin>>h; switch(h) { case 1: h=1; break; case 0: h=0; break; default:{ cout<<\选择出错\ } } } }

f=z+1;//全局静态变量z,初始值为0 while (z++) { G->cost[n[z].ctime][x[z].ctime]=m[z].ctime; } z=f;

return(G); }

//Floyed函数 求任意两点的最短路径:

void Floyed(unDiGraph *D,unDiGraph *M)//图D M { int i,j,k,n;//i,j为循环变量,k表中间节点的变量 costAdj A,C;//A C为图,临时表示两种最佳路线组成的矩阵,定义costAdj B L n=cnumber;

for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { A[i][j]=D->cost[i][j];//初始化矩阵A,C。 C[i][j]=M->cost[i][j];

精品

Path[i][j]=-1; //初始化权矩阵p } } for(k=1;k<=n;k++) //k为逐步加入的中间结点 { for(i=1;i<=n;i++) //i代表矩阵A中行号 { for(j=1;j<=n;j++) { if(A[i][k]+A[k][j]

//为了求从i到j的最短路径,只需要调用如下的过程: void prn_pass(int i,int j) { if(Path[i][j]!=-1) { prn_pass(i,Path[i][j]);//输出最短路径经过的所有点个数k pr(Path[i][j],0); } }

//求最少时间路径。 void time() { int Bcity,Ecity;//起始成市号码和终点城市号码 int l,h=1;//定义变量l h do { pri();//输出城市列表及相应代码。

精品

cout<<\请输入起始城市和目的城市的代码,中间以空格隔开\ cin>>Bcity; cin>>Ecity;//输入起始城市和终点城市的代码。 if

(!((0

prn_pass(Bcity,Ecity);//调用prn_pass函数,显示最短路径经过的城市。 pr(Ecity,0);//显示终点城市。

if (B[Bcity][Ecity]>8000||L[Bcity][Ecity]>8000) { cout<<\两地间还没有线路通过\ } else { cout<<\火车花的时间是\小时\ } cout<<\输入0.返回主菜单 \ scanf(\ h=l;

} while(h==1); }

//求最少花费路径。 void money() { int Bcity,Ecity;//起始成市号码和终点城市号码 char l,h=1; do { pri();//输出城市列表及相应代码。 cout<<\请输入起始城市和目的城市的代码,中间以空格隔开\ cin>>Bcity; cin>>Ecity;//输入起始城市和终点城市的代码。 if

(!((0

} Floyed(CreateCostG(0),CreateTimeG(0));//调用Floyed函数。 pr(Bcity,0);//显示起始城市。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4