求带权无向图项点u和v之间的距离为L的路径和所有路径。
用dfs遍历所有的边,然后用数组path记录两点之间的路径。
代码
#include <bits/stdc++.h>
using namespace std;
int mp[100][100];
int a, b;
int n;
int poi[100];
int path[100];
int l;
void dfs(int id, int num)
{
if(id == b)
{
int sum = 0;
for (int i = 1; i < num; i++) //输出路径
{
cout << path[i] << " ";
if(i != 1)
sum += mp[path[i - 1]][path[i]]; //计算路径的权值
}
if(sum == l) //查看是否等于l
{
cout << " 此条路径边权值和为l";
}
cout << endl;
return;
}
for (int i = 1; i <= n; i++)
{
if(mp[id][i] != -1 && !poi[i]) //如果这个有边 并且没有被走过
{
poi[i] = 1; //初始化
path[num] = i;
dfs(i, num + 1); //往下走
poi[i] = 0;
}
}
}
int main()
{
cout << "请输入节点个数" << endl;
cin >> n;
cout << "请输入无向图的邻接矩阵" << endl;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
cin >> mp[i][j];
}
}
cout << "请输入起点和终点" << endl;
cin >> a >> b; //查询从a 到 b
cout << "请输入路径长度l" << endl;
cin >> l;
path[1] = a;
dfs(a, 2);
}
运行结果如下