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

HDU - 1175 连连看(带转弯的dfs)

时间:2017-05-01 13:38:09      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:get   using   lag   color   代码   不为   模拟   else   target   

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

题意:代码模拟连连看(转弯数不能超过两次)并且不能绕外圈。

和前面几题大同小异,只不过要标记一下,因为连在一起的相当于这两个点没有了。

 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int dx[4]={0,1,0,-1};
 6 int dy[4]={1,0,-1,0};
 7 int map[1111][1111];
 8 bool vis[1111][1111];
 9 bool flag;
10 int n,m,q,x1,x2,y1,y2;
11 
12 void dfs(int x,int y,int turn,int dir){
13     int xx,yy;
14     if(flag) return; 
15     if(x>n||x<1||y<1||y>m||vis[x][y]) return;//越界,返回 
16     if(turn>2) return;//转弯数超过限定的,返回 
17     if(turn==2&&x!=x2&&y!=y2) return; //转弯数到达,但是没到点,返回 
18     if(x==x2&&y==y2&&turn<=2){
19         cout<<"YES"<<endl;
20         flag=1;
21         return;
22     }//成功,返回 
23     if(map[x][y]!=0){
24         if(x==x1&&y==y1);
25         else return;
26     }//当目前位置不为0,并且不为起点的时候要返回 
27     vis[x][y]=1;
28     for(int i=0;i<4;i++){
29         xx=x+dx[i];
30         yy=y+dy[i];
31         if(i==dir) dfs(xx,yy,turn,dir);
32         else dfs(xx,yy,turn+1,i);
33     }
34     vis[x][y]=0;
35     return;
36 }
37 
38 int main(){
39     while(cin>>n>>m,n||m){
40         memset(vis,0,sizeof(vis));
41         
42         for(int i=1;i<=n;i++)
43         for(int j=1;j<=m;j++)
44         cin>>map[i][j];
45         
46         cin>>q;
47         while(q--){
48             cin>>x1>>y1>>x2>>y2;
49             if(x1==x2&&y1==y2){
50                 cout<<"NO"<<endl;
51                 continue;
52             }//当起点终点相同的时候是不能消除
53             if(x1<1||x1>n||y1<1||y1>m||x2<1||x2>n||y2<1||y2>m){
54                 cout<<"NO"<<endl;
55                 continue;
56             }//越界 
57             if(map[x1][y1]==map[x2][y2]&&map[x1][y1]){
58                 flag=0;
59                 for(int i=0;i<4;i++) dfs(x1,y1,0,i);//4个方向处理 
60                 if(!flag) cout<<"NO"<<endl;
61             }
62             else cout<<"NO"<<endl;
63         }
64     }
65     return 0;
66 }

 

HDU - 1175 连连看(带转弯的dfs)

标签:get   using   lag   color   代码   不为   模拟   else   target   

原文地址:http://www.cnblogs.com/Leonard-/p/6791677.html

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