该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
int i,j,k; for(i = 1; i <= n; i++) //初始化 for(j = 1; j <= n; j++) { A[i][j] = adj.edges[i][j]; //i j之间长度 if(i==j) { A[i][j] = 0; } path[i][j] = -1; //初始化 } for(k = 1; k <= n; k++) for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) { if(A[i][j] > (A[i][k] + A[k][j])) { A[i][j] = A[i][k]+A[k][j]; //修改最短路径长度值 path[i][j] = k; //将最短路径的节点号保存 } } Dispath(A,path,n,g); //用户输入,查找任意两个景点间的最短路径。} void Deep_Find_View(vexnode g[],int v,int n,int visted[]) //深度优先递归调用遍历,v起始顶点。{ edgenode *p; int flag = 0; if(flag == 0 && visted[v] == 0) { printf("%s",g[v].data); flag = 1; visted[v] = 1; } p = g[v].link; while(p != NULL) { if(visted[p->adjvex] == 0) //未被访问,则访问。 { printf("%s",p->info); visted[p->adjvex] = 1; Deep_Find_View(g,p->adjvex,n,visted); //递归调用 } p = p->next; }} void DFS(int n,vexnode g[]) //深度递归遍历,找出参观全部景点的最佳路线。{ int i,v; int visted[MAX]; //访问标志数组 for(i = 1; i <= n; i++) { visted[i] = 0; //为visited[]数组赋初值,0表示没访问。 } printf("请输入起始景点:\n"); scanf("%d",&v); printf("The route is:\n"); Deep_Find_View(g,v,n,visted);} int main(){ int n = 0; //景点数目 vexnode g[MAX]; //保存顶点及其信息 EdgeType e[MAXedg]; //保存边及其信息 adjmax adj; //保存边和定点 char choice = 'x'; while(1) { clrscr(); printf("\n\n\t\t\t***校园导游系统***"); printf("\n\t\t*************************************\n\n"); printf("\t\t\t1. 文件读入并创建校园图:\n\n"); printf("\t\t\t2. 查询景点详细信息:\n\n"); printf("\t\t\t3. 查询道路详细信息:\n\n"); printf("\t\t\t4. 查找两景点间最短路径:\n\n"); printf("\t\t\t5. 查找最佳参观路线:\n\n"); printf("\t\t\t0. 退出\n\n"); printf("\t\t\tWrite By Edvis@2012/6/11"); printf("\n\t\t************************************\n\n"); printf("Please enter your choice(0-5):\n "); choice = getchar(); switch(choice) { case '1': clrscr(); creatgraph(g,n,e,&adj); //创建图(景点,景点数,边,边和景点) printf("\n*******按任意键返回********\n"); getchar(); break; case '2': clrscr(); travgraph(g,n,adj); //查找指定景点信息(景点,景点数,边和景点) printf("\n*******按任意键返回********\n"); getchar(); break; case '3': clrscr(); Find_way(g,e); //查询道路信息(景点,边) printf("\n*******按任意键返回********\n"); getchar(); break; case '4': clrscr(); Floyd(adj,n,g); //查找两个景点间最短路径(边和景点,景点数,景点) getchar(); printf("\n*******按任意键返回********\n"); getchar(); break; case '5': clrscr(); DFS(n,g); //找出参观全部景点的最佳路线 getchar(); printf("\n"); printf("\n*******按任意键返回********\n"); getchar(); break; case '0': clrscr(); printf("\n*******按任意键退出********\n"); getchar(); exit(0); break; default: printf("\n输入错误,请重新输入:\n"); getchar(); break; } } return 0; getch();}