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 }

 

posted on 2013-02-10 22:52  T^T  阅读(199)  评论(0编辑  收藏  举报

导航