码迷,mamicode.com
首页 > 其他好文 > 详细

DFS模板

时间:2016-07-28 15:37:36      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

POJ2488

http://poj.org/problem?id=2488

注意字典序。

 1  1 #include<iostream>
 2  2 #include<cstdio>
 3  3 #include<cstring>
 4  4 #include<algorithm>
 5  5 using namespace std;
 6  6 int dir[8][2]={-2,-1,-2,1,-1,-2,-1,2,1,-2,1,2,2,-1,2,1};
 7  7 int map[100][100];
 8  8 char a[200];
 9  9 int p,q,flag;
10 10 int check(int x,int y)                          // 边界条件和约束条件的判断 
11 11 {
12 12     if(!map[x][y]&&x<=p&&x>0&&y<=q&&y>0)
13 13     return 1;
14 14     return 0;
15 15 }
16 16 void dfs(int x,int y,int s)
17 17 {
18 18     if(s==p*q&&!flag)                                // 出现目标态G
19 19     {
20 20         for(int j=0;j<s*2;j++)
21 21         printf("%c",a[j]);
22 22         printf("\n\n");
23 23         flag=1;                                    //标记,非常重要。 
24 24         return;
25 25     }
26 26     for(int i=0;i<8&&!flag;i++)
27 27     {
28 28         int n=x+dir[i][0];int m=y+dir[i][1];      // 按照规则生成下一个节点,注意必须重新定义变量 
29 29         if(check(n,m))
30 30         {
31 31             map[n][m]=1;
32 32             a[2*s]=A+n-1; 
33 33             a[2*s+1]=m+0;
34 34         dfs(n,m,s+1);
35 35         map[n][m]=0;
36 36         }
37 37 }
38 38 }
39 39 main()
40 40 {
41 41     int t,cas=1;
42 42     scanf("%d",&t);
43 43     while(t--)
44 44     {
45 45         scanf("%d%d",&q,&p);
46 46         printf("Scenario #%d:\n",cas++);
47 47         memset(map,0,sizeof(map));
48 48         flag=0;
49 49         map[1][1]=1;
50 50         a[0]=A;a[1]=1;
51 51         dfs(1,1,1);
52 52         if(!flag)
53 53         printf("impossible\n\n");
54 54     }
55 55 }

 

DFS模板

标签:

原文地址:http://www.cnblogs.com/CrazyBaby/p/5714945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!