zoukankan      html  css  js  c++  java
  • D. Treasure Island

    D. Treasure Island

    dfs大法好==

    写半天bfs疯狂MLE

    dfs标记掉路上的一些点

    然后再跑一遍dfs

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    #define sc(x) scanf("%I64d",&x);
    #define read(A) for(int i=0;i<n;i++)scanf("%I64d",&A[i]);
    #define endl '
    '
    #define fi first
    #define se second
    #define si signed
    #define P pair<si,si>
    #define pb push_back
    #define maxn 1000000+100
    bool A[maxn];
    int n,m;
    queue<P>q;
    P fa[maxn];
    bool vis[maxn];
    int cnt=0;
    bool bfs()
    {
        while(!q.empty())q.pop();
        q.push(P(0,0));
        while(!q.empty())
        {
            P a=q.front();
            q.pop();
            si x=a.fi;
            si y=a.se;
            //B[x*m+y]++;
            if(x==n-1&&y==m-1)
            {
              //  cnt++;
                //f=0;
                return false;
            }
            if(x+1<n)
            {
                if(A[(x+1)*m+y]==0)
                {
                    fa[(x+1)*m+y]=P(x,y);
                    q.push(P(x+1,y));
                }
            }
            if(y+1<m)
            {
                if(A[x*m+y+1]==0)
                {
                    fa[x*m+y+1]=P(x,y);
                    q.push(P(x,y+1));
    
                }
            }
        }
    
        return true;
        //else return false;
    }
    bool dfs(int x,int  y)
    {
        vis[x*m+y]=1;
        int a=x+1;
        if(x==n-1&&y==m-1)return true;
        if(a<n&&!vis[a*m+y]&&A[a*m+y]==0){
            if(dfs(a,y))return true;
        }
        int b=y+1;
        if(b<m&&!vis[x*m+b]&&A[x*m+b]==0){
            if(dfs(x,b))return true;
        }
        return false;
    
    }
    signed main()
    {
        sc(n);
        sc(m);
        int t=0;
        for(int i=0; i<n; i++)
        {
            getchar();
            for(int j=0; j<m; j++)
            {
                A[i*m+j]=(getchar()=='#'?1:0);
                t+=A[i*m+j];
            }
        }
        if(t==0&&(n==1||m==1)){
            cout<<1<<'
    ';
            return 0;
        }
        if(t==0)
        {
            cout<<2<<'
    ';
            return 0;
        }
        if(n==1||m==1){
            cout<<0<<'
    ';
            return 0;
        }
        int ans=2;
        if(!dfs(0,0)){
            cout<<0<<'
    ';
            return 0;
        }
        vis[0]=vis[(n-1)*m+m-1]=0;
        if(!dfs(0,0)){
            cout<<1<<'
    ';
            return 0;
        }
        cout<<2<<'
    ';
       /* if(bfs())
        {
            cout<<0<<'
    ';
            return 0;
        }
        //cout<<B[1*m+2]<<endl;
        P x=fa[(n-1)*m+m-1];
        si c,d;
        while(true){
            c=x.fi,d=x.se;
            if(c==0&&d==0)break;
            x=fa[c*m+d];
            A[c*m+d]=1;
        }
        if(bfs()){
            cout<<1<<'
    ';
            return 0;
        }
        cout<<ans<<'
    ';
    */
    }
  • 相关阅读:
    java中数据库通用层
    java中dao层的通用层,通过反射机制,操作数据库的增删改,适用的范围是不包含属性类
    反射,类,构造方法,方法,属性
    如何求组合数(逆元)
    Go Home
    Dubious Document
    Factors of Factorial
    Lining Up
    AtCoDeer and Rock-Paper
    Boxes and Candies
  • 原文地址:https://www.cnblogs.com/liulex/p/11461685.html
Copyright © 2011-2022 走看看