hiho1054滑动解锁(dfs)

题目链接:https://hihocoder.com/problemset/problem/1054

补一下dfs的题,有点弱。。。

 1 #include<cstdio>
 2 #include<cstring>
 3 
 4 int WA[10][10];
 5 int known[10][10];
 6 int num[10],vis[10];
 7 int t,n;
 8 int x,y;
 9 int res;
10 void dfs(int ans)
11 {
12     if(ans>=4)
13     {
14         int temp=0;
15         for(int i=1;i<ans;i++)
16         {
17             if(known[num[i]][num[i-1]])
18                 temp++;
19         }
20         if(temp==n)
21             res++;
22 
23     }
24     for(int i=1;i<=9;i++)
25     {
26         if(ans>0&&!vis[WA[num[ans-1]][i]]) continue;
27         if(!vis[i])
28         {
29             vis[i]=1;
30             num[ans]=i;
31             dfs(ans+1);
32             vis[i]=0;
33         }
34     }
35     return ;
36 }
37 int main()
38 {
39     memset(WA,0,sizeof(WA));
40         WA[1][3]=WA[3][1]=2;
41         WA[1][7]=WA[7][1]=4;
42         WA[1][9]=WA[9][1]=5;
43         WA[2][8]=WA[8][2]=5;
44         WA[3][7]=WA[7][3]=5;
45         WA[3][9]=WA[9][3]=6;
46         WA[4][6]=WA[6][4]=5;
47         WA[7][9]=WA[9][7]=8;
48 
49     scanf("%d",&t);
50     while(t--)
51     {
52         res=0;
53         memset(known,0,sizeof(known));
54         memset(vis,0,sizeof(vis));
55         vis[0]=1;
56         scanf("%d",&n);
57         for(int i=0;i<n;i++)
58         {
59             scanf("%d%d",&x,&y);
60             known[x][y]=known[y][x]=1;
61         }
62         dfs(0);
63         printf("%d\n",res);
64     }
65 }

 

posted @ 2017-03-31 23:03  yijiull  阅读(183)  评论(0编辑  收藏  举报