Description
In your childhood you most likely had to solve the riddle of the house of Santa Claus. Do you remember that the importance was on drawing the house in a stretch without lifting the pencil and not drawing a line twice? As a reminder it has to look like shown in Figure 1.
Figure: The House of Santa Claus
Well, a couple of years later, like now, you have to ``draw‘‘ the house again but on the computer. As one possibility is not enough, we require all the possibilities when starting in the lower left corner. Follow the example in Figure 2 while defining your stretch.
Figure: This Sequence would give the Outputline 153125432
All the possibilities have to be listed in the outputfile by increasing order, meaning that 1234... is listed before 1235... .
So, an outputfile could look like this:
12435123 13245123 ... 15123421
#include <iostream> #include <cstring> using namespace std; int map[6][6]; void makemap() { memset(map,0,sizeof(map)); int i,j; for(i=1;i<=5;i++) { for(j=1;j<=5;j++) if(i!=j) map[i][j]=1; map[1][4]=map[4][1]=0; map[2][4]=map[4][2]=0; } } void dfs(int x,int k,string s)//DFS遍历,目前已生成长度为k-1的一笔画序列s,准备将x扩展为s的第k条边 { s=s+char(x+'0');//节点x进入访问序列 if(k==8)//若完成了一笔画,则输出一笔画序列s { cout<<s<<endl; return; } int i; for(i=1;i<=5;i++)//按照节点序号递增的顺序访问邻接x未访问 { if(map[x][i]!=0) { map[x][i]=map[i][x]=0; dfs(i,k+1,s); map[x][i]=map[i][x]=1; } } } int main() { makemap();//生成无向图的相邻矩阵 dfs(1,0,"");//从节点1出发计算所有可能的访问序列 }
原文:http://blog.csdn.net/sunshumin/article/details/38443829