您的位置:首页 > 其它

hdu1175(教你记录搜索时方向的变化次数)

2014-01-25 22:04 281 查看
#include<iostream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#include<math.h>

#define eps 1e-9
#define N 1005
#define P system("pause")
using namespace std;
int n,m,flag;
int a

,vis

;
int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
int sx,sy,nx,ny;
 
void dfs(int x,int y,int dir,int count)
{
   // cout<<x<<y<<count<<endl; 
    if(flag) return; 
    
    if(count>2) return;
    if(x<0 || x>=n || y<0 || y>=m) return;
  //  cout<<x<<y<<count<<endl; 
    
    if(x==nx && y==ny) {flag=1;return ;}
    if(a[x][y]) return ;
    if(vis[x][y]) return ;
   
    vis[x][y]=1;
    if(dir == 1)
    {
             dfs(x-1,y,1,count);
             dfs(x+1,y,2,count+1);
             dfs(x,y-1,3,count+1);
             dfs(x,y+1,4,count+1);          
    }
    else if(dir == 2)
    {
             dfs(x-1,y,1,count+1);
             dfs(x+1,y,2,count) ;
             dfs(x,y-1,3,count+1);
             dfs(x,y+1,4,count+1);  
    }
    else if(dir == 3)
    {
             dfs(x-1,y,1,count+1);
             dfs(x+1,y,2,count+1);
             dfs(x,y-1,3,count);
             dfs(x,y+1,4,count+1);  
    }
    else if(dir == 4)
    {
             dfs(x-1,y,1,count+1);
             dfs(x+1,y,2,count+1);
             dfs(x,y-1,3,count+1);
             dfs(x,y+1,4,count);  
    }
    
    vis[x][y]=0;     
}

int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);cc
    
    int i,j,t;
    while(scanf("%d%d",&n,&m))
    {
        if(!m&&!n) break;
        for(i=0;i<n;i++)
           for(j=0;j<m;j++)
              scanf("%d",&a[i][j]);
        scanf("%d",&t);
        while(t--)
        {
             scanf("%d%d%d%d",&sx,&sy,&nx,&ny);
             sx--;sy--;
             nx--;
             ny--;    
             if(a[sx][sy]!=a[nx][ny] || (!a[sx][sy]&&!a[nx][ny]))
             {
                    printf("NO\n");
                    continue;                  
             }
             memset(vis,0,sizeof(vis));
             vis[sx][sy]=1;
               flag=0;
             dfs(sx-1,sy,1,0);
             dfs(sx+1,sy,2,0);
             dfs(sx,sy-1,3,0);
             dfs(sx,sy+1,4,0);
           
             if(flag) printf("YES\n");
             else printf("NO\n");          
        }
                 
                                  
    }
                        

   // P;                               
    return 0;    
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: