题目描述
假设无向图G采用邻接矩阵存储,设计一个算法,输出图G中从顶点u到v的所有简单路径。
输入
简单路径是指路径上的顶点不重复。第一行为一个整数n,表示顶点的个数(顶点编号为0到n-1),第二行表示顶点u和v的编号,接下来是为一个n*n大小的矩阵,表示图的邻接关系。数字为0表示不邻接,1表示不邻接。
输出
输出图G中从顶点u到v的所有简单路径。
#include<bits/stdc++.h>
using namespace std;
int n, x, y, m, a[1005], b[1005];
vector<int>v[105];
void dfs(int x, int num){
if(x == y){
for(int i = 1; i < num; i++) cout<<a[i];
cout<<endl;
return;
}
for(auto i:v[x]){
if(b[i]) continue;
b[i]++;
a[num] = i;
dfs(i, num + 1);
b[i]--;
}
}
int main(){
cin>>n>>x>>y;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cin>>m;
if(m) v[i].push_back(j);
}
}
a[1] = x;
b[x]++;
dfs(x, 2);
}