复制
收藏
提问
简洁

#include<bits/stdc++.h> #define max 999999 #define M 20 int dist[M][M];///距离 int path[M][M];///路径 int Stack[M];///路径栈 int top;///栈顶 int counts;///记录路径数 int visited[M];///标记数组 using namespace std; struct vertex///景点信息结构体 { int num;///景点编号 char name[20];///景点名称 char info[300];///景点介绍 }; struct maps { int n;///点数 int m;///边数 vertex v[M]; int edgs[M][M];///邻接矩阵 } g; ///景点图的结构体 void Creat_vertex() { g.v[0].num=1; strcpy(g.v[0].name,"图书馆"); strcpy(g.v[0].info,"丰富的藏书资源"); g.v[1].num=2; strcpy(g.v[1].name,"体育馆"); strcpy(g.v[1].info,"为同学们提供运动的场所"); g.v[2].num=3; strcpy(g.v[2].name,"文科楼"); strcpy(g.v[2].info,"文科专业的同学上课和学习的地方"); g.v[3].num=4; strcpy(g.v[3].name,"工科楼"); strcpy(g.v[3].info,"工科专业同学学习和上课的地方"); g.v[4].num=5; strcpy(g.v[4].name,"公教一"); strcpy(g.v[4].info,"在校同学们公用的教学楼"); g.v[5].num=6; strcpy(g.v[5].name,"理科楼"); strcpy(g.v[5].info,"理科同学上课和学习的地方"); g.v[6].num=7; strcpy(g.v[6].name,"篮球场"); strcpy(g.v[6].info,"为热爱篮球的同学们提供"); g.v[7].num=8; strcpy(g.v[7].name,"公教二"); strcpy(g.v[7].info,"第七教学楼,设备新颖"); g.v[8].num=9; strcpy(g.v[8].name,"琴湖"); strcpy(g.v[8].info,"河科大内部的一个人工湖"); g.v[9].num=10; strcpy(g.v[9].name,"国际教育学院"); strcpy(g.v[9].info,"国际教育"); g.v[10].num=11; strcpy(g.v[10].name,"十教"); strcpy(g.v[10].info,"卓越学院,国际教育学院"); g.v[11].num=12; strcpy(g.v[11].name,"数学学院"); strcpy(g.v[11].info,"经济,会计,人艺数法学院"); g.v[12].num=13; strcpy(g.v[12].name,"学生活动中心"); strcpy(g.v[12].info,"这是举办文艺活动的场所"); } void Creat_maps() { int i,j; g.n=13;///13个景点 g.m=18;///18条双向路径 for(i=0; i<g.n; i++) ///初始化邻接矩阵 { for(j=0; j<g.n; j++) { g.edgs[i][j]=max; } } g.edgs[0][1]=g.edgs[1][0]=289;///写入边的信息 g.edgs[0][2]=g.edgs[2][0]=305; g.edgs[0][7]=g.edgs[7][0]=506; g.edgs[1][3]=g.edgs[3][1]=285; g.edgs[1][4]=g.edgs[4][1]=220; g.edgs[2][7]=g.edgs[7][2]=460; g.edgs[2][10]=g.edgs[10][2]=500; g.edgs[3][4]=g.edgs[4][3]=348; g.edgs[4][5]=g.edgs[5][4]=159; g.edgs[4][6]=g.edgs[6][4]=158; g.edgs[5][6]=g.edgs[6][5]=355; g.edgs[5][8]=g.edgs[8][5]=254; g.edgs[6][8]=g.edgs[8][6]=250; g.edgs[6][12]=g.edgs[12][6]=290; g.edgs[6][7]=g.edgs[7][6]=209; g.edgs[8][9]=g.edgs[9][8]=503; g.edgs[9][11]=g.edgs[11][9]=455; g.edgs[10][11]=g.edgs[11][10]=340; } void Search_info() { int i,n; printf("河南科技大学的地点有:\n"); for(i=0; i<13; i++) { printf("%d:%s\n",g.v[i].num,g.v[i].name); } while(1) { printf("请输入你想要查询的地点编号:\n"); printf("按0退出\n\n"); scanf("%d",&n); getchar(); if(n==0) { break; } else if(n<0||n>13) { printf("输入有误,请重新输入!!!\n\n"); continue; } else { printf("%d:%s\n",g.v[n-1].num,g.v[n-1].name); printf("%s\n\n",g.v[n-1].info); } } return ; } void Floyd() ///弗洛伊德 { int i,j,k; for(i=0; i<g.n; i++) ///初始化距离与路径矩阵 { for(j=0; j<g.n; j++) { dist[i][j]=g.edgs[i][j]; if(i!=j&&dist[i][j]<max) { path[i][j]=i; } else { path[i][j]=-1;///-1代表不可达 } } } //printf("%d\n",g.n); for(k=0; k<g.n; k++) { for(i=0; i<g.n; i++) { for(j=0; j<g.n; j++) { if(dist[i][j]>(dist[i][k]+dist[k][j])) { dist[i][j]=dist[i][k]+dist[k][j];///更新 path[i][j]=k; ///path用于记录最短路径上的结点*/ } } } } return ; } void Floyd_print(int s, int e) { if(path[s][e]==-1||path[s][e]==e||path[s][e]==s)///递归终止条件 { return; } else { Floyd_print(s,path[s][e]);///将中间点作为终点继续打印路径 printf("%s->",g.v[path[s][e]].name);///打印中间景点名字 Floyd_print(path[s][e],e);///将中间点作为起点继续打印路径 } } void Dfs_allpath(int s,int e) { int dis=0;

626bb0e9c
2个月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

看起来你正在编写一个C++程序,用于处理一个校园地图的最短路径问题。你的程序包括了景点信息的创建、地图的创建、信息查询、弗洛伊德算法实现最短路径的计算,以及打印最短路径的功能。

不过,你的 Dfs_allpath 函数似乎没有完成。深度优先搜索(DFS)通常用于寻找从起点到终点的所有可能路径,但你的函数目前只定义了一个函数原型和一些未使用的局部变量。

我可以帮你完成这个函数。Dfs_allpath 函数的目的可能是通过递归来找到从起点 s 到终点 e 的所有路径。这里是一个可能的实现方式:

void Dfs_allpath(int s, int e, int step) {
    if (s == e) {
        // 打印当前路径
        for (int i = 0; i <= step; ++i) {
            printf("%s->", g.v[Stack[i]].name);
        }
        printf("%s\n", g.v[e].name); // 打印终点
        counts++; // 增加路径计数
        return;
    }

    visited[s] = 1; // 标记当前节点为已访问

    for (int i = 0; i < g.n; ++i) {
        if (dist[s][i] < max && !visited[i]) { // 如果存在路径并且节点未访问
            Stack[step + 1] = i; // 将节点加入路径栈
            Dfs_allpath(i, e, step + 1); // 递归调用
        }
    }

    visited[s] = 0; // 回溯,将当前节点标记为未访问
}

在这个函数中,我们使用了一个辅助数组 visited 来跟踪已经访问过的节点,以避免重复访问。Stack 数组用于存储当前路径上的节点。counts 变量用于记录找到的路径数量。

要使用这个函数,你需要在程序的合适位置初始化 visited 数组,并将所有元素设置为0。然后,你可以调用 Dfs_allpath(s, e, 0) 来开始搜索从节点 s 到节点 e 的所有路径。

请注意,这个函数会打印出所有找到的路径,并且在每次找到一条路径时增加 counts 变量的值。你可能需要在程序的其他部分添加适当的逻辑来调用这个函数,并处理输出结果。

你觉得结果怎么样?
C++中如何使用Floyd算法求最短路径?
Floyd算法在C++中的实现方法
C++中如何使用邻接矩阵表示图?
C++中如何实现深度优先搜索(DFS)?
C++中如何使用栈来存储路径?
C++中如何定义和使用结构体存储数据?

以上内容由AI搜集生成,仅供参考

在线客服