依然是深度优先,与之前不同的是,被标记的点每次遍历完之后要取消标记,以寻找其他路径,并且用栈来存放已访问过的点,遇到终点一次性输出
#include<iostream> using namespace std; int n; int map[100][100]; int zh[100]; //存放当前路径 int flag[100]; void dfs(int x,int y,int t) { flag[x]=1; zh[t]=x; if(x==y) { for(int i=0;i<=t;i++) cout<<zh[i]; cout<<endl; } for(int i=0;i<=n;i++) { if(map[x][i]!=0&&flag[i]==0) { dfs(i,y,t+1); } } flag[x]=0; //标记取消 } int main() { cin>>n; int begin,end; cin>>begin>>end; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>map[i][j]; dfs(begin,end,0); return 0; }