hdu 1175 连连看(深搜)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175

题意:判断两个位置的图案能否消除(存在不超过两次拐弯的连线)。

解题过程:

1、一开始开vis[][]记录已走过的位置,每个位置只能走一次。这样明显不行,因为一些拐弯超过两次的路线会与正确的路线重合,那么正确的路线就行不通了。

2、跳出条件设置的地方错了,导致暴栈。

 

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #define N 1005
 4 
 5 int a[N][N], n, m, flag, x1, x2, y1, y2, ans;
 6 int dir[4][2] = {1,0,-1,0,0,1,0,-1};
 7 
 8 void dfs(int x0, int y0, int xn, int yn)
 9 {
10     if(xn==x2 && yn==y2) {ans = 1return;}
11     for(int i=0; i<4; i++)
12     {
13         if(ans==1return;
14         int xnn = xn + dir[i][0], ynn = yn + dir[i][1];
15         if(xnn==x0 && ynn==y0) continue;
16         if(xnn<=n && xnn>=1 && ynn<=m && ynn>=1 && a[xnn][ynn]==0)
17         {
18             if(xnn!=x0 && ynn!=y0)
19             {
20                 if(flag>=2continue;
21                 flag++;
22                 dfs(xn, yn, xnn, ynn);
23                 flag--;
24             }
25             else
26                 dfs(xn, yn, xnn, ynn);
27         }
28     }
29 }
30 
31 int main()
32 {
33     int q;
34     while(scanf("%d%d",&n,&m)!=EOF)
35     {
36         if(n==0 && m==0break;
37         for(int i=1; i<=n; i++)
38             for(int j=1; j<=m; j++)
39                 scanf("%d",&a[i][j]);
40         scanf("%d",&q);
41         for(int i=1; i<=q; i++)
42         {
43             ans = 0; flag = 0;
44             scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
45             if(x1==x2 && y1==y2) printf("NO\n");
46             else
47             {
48                 if(a[x1][y1]==a[x2][y2] && a[x1][y1]!=0)
49                 {
50                     int temp2 = a[x2][y2];
51                     a[x2][y2] = 0;
52                     dfs(x1,y1,x1,y1);
53                     a[x2][y2] = temp2;
54                 }
55                 if(ans==1)
56                     printf("YES\n");
57                 else
58                     printf("NO\n");
59             }
60         }
61     }
62     return 0;
63 }
View Code

 

 /*

 

13 5
0 0 0 0 0
0 0 0 4 0
0 0 0 4 0
0 0 0 4 0
0 0 0 4 0
0 0 0 4 0
0 0 0 4 0
0 0 0 4 0
0 0 0 4 0
0 0 0 4 0
0 4 1 4 0
0 4 4 4 0
0 0 0 0 1
1
13 5 11 3
YES

 

*/

posted @ 2013-12-14 00:13  byluoluo  阅读(221)  评论(0编辑  收藏  举报