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

lianliankan

时间:2014-11-24 19:03:52      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   sp   for   

bubuko.com,布布扣
  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cmath>
  4 #include<cstdlib>
  5 #include<cstring>
  6 #include<queue>
  7 using namespace std;
  8 int map[1005][105];
  9 int vis[1005][105];
 10 int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
 11 int n,m;
 12 int x1i,y1j,x2i,y2j;
 13 int flag;
 14 struct ln{
 15     int x;
 16     int y;
 17     int step;
 18 }abc,q;
 19 
 20 int border(int x,int y)
 21 {
 22     if(x>=1&&x<=n && y>=1&&y<=m)
 23     {
 24         if(!map[x][y] && !vis[x][y] )
 25         return 1;
 26     }
 27     return 0;
 28 }
 29 
 30 void bfs()
 31 {
 32     int i;
 33     queue<struct ln>p;
 34     memset(vis,0,sizeof(vis));
 35     abc.x=x1i;
 36     abc.y=y1j;
 37     abc.step=-1;
 38     vis[abc.x][abc.y]=1;
 39     p.push(abc);
 40     while(!p.empty())
 41     {
 42         abc=p.front();
 43         p.pop();
 44         if( abc.x==x2i && abc.y==y2j && map[abc.x][abc.y]==map[x2i][y2j] && abc.step<=2 )
 45         {
 46             flag=1;
 47             return ;
 48         }
 49         q.step=abc.step+1;
 50 
 51 
 52         for(i=0;i<4;i++)
 53         {
 54             q.x=abc.x+dir[i][0];
 55             q.y=abc.y+dir[i][1];
 56             while(border(q.x,q.y))
 57             {
 58                 if(!vis[q.x][q.y])
 59                 {
 60                     vis[q.x][q.y]=1;
 61                     p.push(q);
 62                 }
 63                 q.x+=dir[i][0];
 64                 q.y+=dir[i][1];
 65             }
 66         }
 67     }
 68     return ;
 69 }
 70 
 71 int main()
 72 {
 73     while(~scanf("%d%d",&n,&m))
 74     {
 75         if(!n&&!m)
 76         break;
 77         int i,j;
 78         for(i=1;i<=n;i++)
 79         {
 80             for(j=1;j<=m;j++)
 81             {
 82                 scanf("%d",&map[i][j]);
 83             }
 84         }
 85         int q;
 86         scanf("%d",&q);
 87         for(i=1;i<=q;i++)
 88         {
 89             flag=0;
 90             scanf("%d%d%d%d",&x1i,&y1j,&x2i,&y2j);
 91             if(map[x1i][y1j]!=map[x2i][y2j])
 92             {
 93                 printf("NO\n");
 94                 continue;
 95             }
 96             else if(map[x1i][y1j]==0&&map[x2i][y2j]==0)
 97             {
 98                 printf("NO\n");
 99                 continue;
100             }
101 
102             bfs();
103             if(flag==1)
104             printf("YES\n");
105             else
106             printf("NO\n");
107 
108         }
109 
110 
111     }
112     return 0;
113 }
View Code

 

lianliankan

标签:style   blog   http   io   ar   color   os   sp   for   

原文地址:http://www.cnblogs.com/xuesen1995/p/4119285.html

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