精品
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);//显示起始城市。