zoukankan      html  css  js  c++  java
  • HDU 4101 Ali and Baba

    两次广搜

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    const int maxn=305;
    int N,M,Sx,Sy;
    int Map[maxn][maxn];
    int Y[maxn][maxn];
    int e[maxn][maxn];
    int flag[maxn][maxn];
    int Flag[maxn][maxn];
    int F[maxn][maxn];
    int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
    int ans,sum;
    
    
    struct Point
    {
        int x,y;
        Point(int a,int b){x=a;y=b;}
    };
    void init()
    {
        memset(flag,0,sizeof flag);//标记有没有走过
        memset(F,0,sizeof F);//标记是否是边界
        memset(Map,0,sizeof Map);
        memset(Flag,0,sizeof Flag);
        memset(e,0,sizeof e);
        memset(Y,0,sizeof Y);
        ans=-1,sum=0;
    }
    
    void read()
    {
        for(int i=1;i<=N;i++)
            for(int j=1;j<=M;j++)
            {
                scanf("%d",&Map[i][j]);
                Y[i][j]=Map[i][j];
            }
    }
    
    void bfs1()
    {
        queue<Point>Q;
        Point p(Sx,Sy);
        flag[Sx][Sy]=1;
        Q.push(p);
        while(!Q.empty())
        {
            Point p=Q.front(); Q.pop();
            
            if(Map[p.x][p.y]!=0&&Map[p.x][p.y]!=-1)
            {
                F[p.x][p.y]=1;//边界标1
                continue;
            }
    
            for(int i=0;i<4;i++)
            {
                int NewX=p.x+dir[i][0];
                int NewY=p.y+dir[i][1];
                if(!flag[NewX][NewY])
                    if(NewX>=1&&NewX<=N)
                        if(NewY>=1&&NewY<=M)
                        {
                            flag[p.x][p.y]=1;
                            Point p(NewX,NewY);
                            Q.push(p);
                        }
            }
        }
        /*
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=M;j++)
                printf("%d",F[i][j]);
            printf("
    ");
        }
        */
    }
    
    void bfs2()
    {
        queue<Point>Q;
        Point p(0,0);
        Flag[0][0]=1;
        Q.push(p);
        while(!Q.empty())
        {
            Point p=Q.front(); Q.pop();
            //printf("%d  %d  %d
    ",p.x,p.y,Map[p.x][p.y]);
            
            if(Map[p.x][p.y])
            {
                if(F[p.x][p.y]) 
                {
                    sum=sum+Map[p.x][p.y]-1;
                    continue;
                }
                else sum=sum+Map[p.x][p.y];
            }
    
            for(int i=0;i<4;i++)
            {
                int NewX=p.x+dir[i][0];
                int NewY=p.y+dir[i][1];
                if(Flag[NewX][NewY]==0)
                    if(NewX>=0&&NewX<=N+1)
                        if(NewY>=0&&NewY<=M+1)
                        {
                            Flag[NewX][NewY]=1;
                            Point p(NewX,NewY);
                            Q.push(p);
                        }
            }
        }
    
    }
    
    void dfs(int x,int y)
    {
        if(x==0||x==N+1||y==0||y==M+1) {ans=1;return;}
        e[x][y]=1;
        for(int i=0;i<4;i++)
        {
            int NewX=x+dir[i][0];
            int NewY=y+dir[i][1];
            if(Y[NewX][NewY]==0)
                if(e[NewX][NewY]==0)
                    dfs(NewX,NewY);
        }
    }
    
    void solve()
    {
        for(int i=1;i<=N;i++)
            for(int j=1;j<=M;j++)
                if(Map[i][j]==-1)
                    Sx=i,Sy=j;
        e[Sx][Sy]=1;dfs(Sx,Sy);
        if(ans==1){printf("Ali Win
    ");return;}
        bfs1();
        bfs2();
      //  printf("%d
    ",sum);
        if(sum%2==1) printf("Ali Win
    ");
        else printf("Baba Win
    ");
    }
    
    int main()
    {
        while(~scanf("%d%d",&N,&M))
        {
            init();
            read();
            solve();
        }
        return 0;
    }
  • 相关阅读:
    解决mongodb设备mongod命令不是内部或外部的命令
    Zoj 3545 Rescue the Rabbit(ac自己主动机+dp)
    中国云计算网站的第六次会议
    MYSQL,innodb_buffer_pool_size内存分配
    SharePoint综合Excel数据与Excel Web Access Web部分
    在小发现SQL字符串比较是不是他们的大写和小写敏感
    代码质量初步
    软件开发:速度 vs 质量
    UI概念体系要素
    模式与方法论
  • 原文地址:https://www.cnblogs.com/zufezzt/p/4927839.html
Copyright © 2011-2022 走看看