dfs递归遍历图

it2022-05-05  137

问题 B: 红红的小房子 红红小时候有一个造房子的梦想,可是他只喜欢画出房子的模型,并不想动手,于是小时候的他买了好多画板准备画房子。 边边走过来对红红说,你能一笔画出房子而且每一条边不重复走嘛 红红夸下海口表示可以,可是接下来他犯难了,怎么走才能一次画完房子。 现在需要你帮帮他找画的方法。 房子示意图如下,要求从结点1 开始走,一笔连接完5个点,你可以考虑用邻接矩阵来存下两个点是否可以连接。当然一个结果是不够的,我们需要所有的结果即从开始的,按字典序输出。

输入 本题无输入。 输出 按字典序输出所有结果。 比如: 123153452 123154352 …

#include<bits/stdc++.h> using namespace std; int a[6][6]; void mp(){ for(int i=1;i<6;i++){ for(int j=1;j<6;j++){ if(i!=j){ a[i][j]=1; } } } a[1][4]=a[4][1]=a[2][4]=a[4][2]=0; } void dfs(int n,int k,string s){ s += char(n + '0'); if(k==8){ cout<<s<<endl; return ; } for(int i = 1;i < 6;i++){ if(a[n][i]){ a[n][i]=a[i][n]=0; dfs(i,k+1,s); a[n][i]=a[i][n]=1; } } } int main(){ mp(); dfs(1,0,""); return 0; }

最新回复(0)