问题 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;
}
这篇博客探讨了如何使用深度优先搜索(DFS)递归遍历图,以解决一笔画出房子的问题。红红面临着一个挑战,需要从节点1开始,不重复地连接所有节点。博客提供了使用邻接矩阵存储连接关系的方法,并强调需要找到所有可能的字典序排列结果。
2877

被折叠的 条评论
为什么被折叠?



