目录
题目
代码部分
#include <iostream>
#include <algorithm>
using namespace std;
int path[100], visits[100]; //前者储存路径,后者记录对应点是否已经被访问
int map[100][100]; //储存邻接矩阵
int k = 0, a, b, n; //记录路径长度
void Find_Path(int k, int end) // k为路径长度,end为可达到的顶点编号,这是动态的
{
path[k++] = end; //将可到达顶点编号存入路径中
visits[end] = 1; //将数组置为1,表示已经访问
if (end == b) //如果此顶点是真正的末顶点
{
for (int i = 0; i < k; i++) cout << path[i];
cout << endl;
}
for (int i = 0; i < n; i++) //遍历该行所有的顶点
{
if (map[end][i] && !visits[i]) //如果存在边并且该顶点没有被访问,便进行进一步递归
{
Find_Path(k, i);
for (int j = k; j < n; j++) //还原标记
{
if (path[j] != -1)
{
visits[path[j]] = 0;
path[j] = -1;
}
}
}
}
}
int main()
{
int i, j;
cin >> n >> a >> b;
for (i = 0; i < n; i++)
{
path[i] = -1; //初始化路径
for (j = 0; j < n; j++) cin >> map[i][j]; //初始化邻接矩阵
}
visits[a] = 1, path[k++] = a;
for (i = 0; i < n; i++)
{
if (map[a][i] && !visits[i]) // 如果存在边并且该顶点没有被访问,便进行进一步递归
{
Find_Path(k, i);
for (int j = k; j < n; j++) //还原标记
{
if (path[j] != -1)
{
visits[path[j]] = 0;
path[j] = -1;
}
}
}
}
return 0;
}
小结
主要代码的解释放在了代码块里面,仅供参考,有问题可以评论区交流,有问必答!!!