G.arcs[10][11].distance=800;G.arcs[10][11].kind=1; G.arcs[11][12].distance=200;G.arcs[11][12].kind=1; G.arcs[12][13].distance=300;G.arcs[12][13].kind=2; G.arcs[13][14].distance=200;G.arcs[13][14].kind=2; G.arcs[14][15].distance=350;G.arcs[14][15].kind=2; for(i=0;i
//将程序中的图结构体写入数据文件 void save_map() { FILE *fp; fp = fopen(\ if(!fp) { printf(\数据文件打开失败!\\n\ } fwrite(&G,sizeof(MGraph),1,fp); fclose(fp); }
//数字输入检验
int input_num_check(int min,int max) { int id,isright=0; do { scanf(\ if(id<=max && id>=min) isright = 1; else { if(getchar() == 'e') { input_exit = 1; return 0; }
15
printf(\输入有误,请重新输入(e:退出):\ } }while(isright != 1); return id; }
void print_fgx() { printf(\}
void shortest_path_ota(int begin) { //Dijkstra(迪杰斯特拉)算法
int i,k=0,v,w,final[MAX_V_NUM],min,m; //初始化 for(v=0;v 16 D[w] = min + G.arcs[v][w].distance; for(m=0;m void DFS_allpath(int bid,int fid,int k) { int i,j; if(path[k] == fid) { for(i=0;i void map_add_vex() { int vid=G.vexnum; int ifgo,order,nearid,newroad=0; do { if(vid>=MAX_V_NUM) { 17 printf(\站点数已达到最大值%d,按任意键返回!\ getchar(); getchar(); system(\ welcome(); return; } printf(\新站点的编号为【%d】,是否继续?(1.继续 e:退出):\ ifgo = input_num_check(1,1); if(input_exit == 1) { input_exit = 0; system(\ welcome(); return; } G.vexs[vid].id = vid; printf(\请输入新站点的名称:\ scanf(\.vexs[vid].name); printf(\请输入新站点的介绍:\ scanf(\.vexs[vid].des); printf(\添加站点成功!\ print_fgx(); G.vexnum++; G.arcnum+=newroad; save_map(); vid++; }while(1); } void map_add_road() { int bid,fid; do { printf(\请输入新增道路起始站点ID(e:退出):\ bid = input_num_check(0,G.vexnum-1); if(input_exit == 1) { 18 input_exit = 0; system(\ welcome(); return; } printf(\请输入新增道路终止站点ID(e:退出):\ fid = input_num_check(0,G.vexnum-1); if(input_exit == 1) { input_exit = 0; system(\ welcome(); return; } if(fid == bid) { printf(\终点与起点重复!\\n\ continue; } if(G.arcs[bid][fid].distance %s -> 19