zoukankan      html  css  js  c++  java
  • 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;
    }



  • 相关阅读:
    索引
    convert 时间转换
    SQL中的case when then else end用法
    SVN安装图解
    dos 命令
    阿里云服务器相关知识
    mvc知识应用
    MVC分页
    mvc系统过滤器
    .net 接口
  • 原文地址:https://www.cnblogs.com/pangblog/p/3301821.html
Copyright © 2011-2022 走看看