291 - The House Of Santa Claus
题目大意
题目原文 http://uva.onlinejudge.org/external/2/291.pdf
题目要求一笔画成那个房子的图案,将所有的情况按从大到小的顺序打印出来。
定义一个二维数组如下:
a 1 2 3 4 5
1 0 1 1 0 1
2 1 0 1 0 1
3 1 1 0 1 1
4 0 0 1 0 1
5 1 1 1 1 0
如a[1][2]=a[2][1]=1表示点2和点1是连通的,0表示不连通。
然后逐个尝试。走过的路线将其赋值2。
首先,从1出发,则dot=1;
然后从a[1]这行开始查找值为1的编号,这里是2,则dot=2,再循环;
附上代码:
View Code
1 #include<stdio.h> 2 int main() 3 { 4 int a[8][8]={{0},{0,0,1,1,0,1},{0,1,0,1,0,1},{0,1,1,0,1,1},{0,0,0,1,0,1},{0,1,1,1,1,0},{0}},b[11]={1},line=1,bo=0,n=1,dot=1,i,j; 5 while(n!=0)//最后n退到0的时候说明已经找完了所有的路线 6 { 7 for(i=b[n]+1;;i++)//i=b[n+1]是为了不重复走死路 8 { 9 if(a[dot][i]==1) 10 { 11 a[dot][i]=a[i][dot]=2;//赋值为2表示这条线已经走过了 12 b[n]=i; 13 n++; 14 break; 15 } 16 if(n==9)//已经完成一条路线,输出 17 { 18 for(j=0;j<=8;j++) 19 printf("%d",b[j]); 20 printf("\n"); 21 i=5;//为了让它进入下面的个if语句 22 } 23 if(i>=5)//死路(已经找到一条,开始找下一条路线),往后退一位 24 { 25 n--; 26 b[n+1]=0; 27 a[b[n]][b[n-1]]=a[b[n-1]][b[n]]=1;//将退回来的路线重新赋值为1 28 bo=1; 29 break; 30 } 31 } 32 if(bo==0) dot=i; 33 else dot=b[n-1];//bo==1表示退了一位 34 bo=0; 35 } 36 return 0; 37 }