HDU 1175 连连看

转载请注明出处:http://blog.csdn.net/a1dark

分析:这题有点坑、数据有点问题、做不过的就看看别人过了的代码、就会发现要错误的理解才能AC、

这道题可以DFS或者BFS都能轻松过、但是还是要养成剪枝的习惯、

#include <stdio.h>
#include <string.h>
int map[1015][1015];
int vis[1015][1015];
int n,m,x1,x2,y1,y2,flag;
void dfs(int x,int y,int z,int k){
    if(flag)
    return;
    if(k>=3)
    return ;
    if(x<=0 || y<=0 || x>n || y>m)
    return ;
    if(x == x2 && y == y2){
        flag = 1;
        return ;
    }
    if(k == 2){
        if(!(z == 1&& x>x2&& y==y2||z == 2&&x<x2&&y==y2||z ==3&&y>y2&&x==x2||z==4&&y<y2&&x==x2))
        return;
    }
    if(map[x][y]!=0) return;
    if(vis[x][y]) return ;
    vis[x][y] = 1;
    if(z == 1){
        dfs(x-1,y,1,k);
        dfs(x+1,y,2,k+1);
        dfs(x,y-1,3,k+1);
        dfs(x,y+1,4,k+1);
    }
    else if(z == 2){
        dfs(x-1,y,1,k+1);
        dfs(x+1,y,2,k);
        dfs(x,y-1,3,k+1);
        dfs(x,y+1,4,k+1);
    }
    else if(z == 3){
        dfs(x-1,y,1,k+1);
        dfs(x+1,y,2,k+1);
        dfs(x,y-1,3,k);
        dfs(x,y+1,4,k+1);
    }
    else if(z == 4){
        dfs(x-1,y,1,k+1);
        dfs(x+1,y,2,k+1);
        dfs(x,y-1,3,k+1);
        dfs(x,y+1,4,k);
    }
    vis[x][y] = 0;
}
int main(){
    while(~scanf("%d%d",&n,&m)){
        if(!n&&!m)
            break;
        int i,j;
        for(i = 1; i<=n; i++)
            for(j = 1; j<=m; j++)
                scanf("%d",&map[i][j]);
        int t;
        scanf("%d",&t);
        while(t--){
            flag = 0;
            memset(vis,0,sizeof(vis));
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            if(x1 == x2 && y1 == y2 && map[x1][y1]!=0)
                printf("NO
");
            else if(map[x1][y1] == map[x2][y2] && map[x1][y1]){
                dfs(x1-1,y1,1,0);
                dfs(x1+1,y1,2,0);
                dfs(x1,y1-1,3,0);
                dfs(x1,y1+1,4,0);
                if(flag)
                    printf("YES
");
                else
                    printf("NO
");
            }
            else
                printf("NO
");
        }
    }
    return 0;
}



原文地址:https://www.cnblogs.com/pangblog/p/3301821.html