• CCF 模拟E DFS深搜


    http://115.28.138.223:81/view.page?opid=5

    这道题问的很怪. 起点DFS,每一个点还要DFS一次,统计不能到终点的个数

    数据量不大这样做也能AC

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int x,y,ax,ay,bx,by;//'#'0, '+'1, '-'2, '|'3, '.'4, 'S', 'T'
    int x1[]={1,-1,0, 0};
    int y1[]={0, 0,1,-1};
    int d[55][55],lable[55][55],labll[55][55];
    int numb,shit=0;
    void ddfs(int xx,int yy)
    {
        if(shit==1){return;}
        if(xx==by&&yy==bx){shit=1;return;}
        if(labll[xx][yy]==2||d[xx][yy]==0||xx<0||yy<0){return;}
        labll[xx][yy]=2;
        if(d[xx][yy]==1)
        {
            for(int i=0;i<4;i++)
            {
                ddfs(xx+x1[i],yy+y1[i]);
                if(shit==1){return;}
            }
        }
        if(d[xx][yy]==2)
        {
            for(int i=2;i<4;i++)
            {
                ddfs(xx+x1[i],yy+y1[i]);
                if(shit==1){return;}
            }
        }
        if(d[xx][yy]==3)
        {
            for(int i=0;i<2;i++)
            {
                ddfs(xx+x1[i],yy+y1[i]);
                if(shit==1){return;}
            }
        }
        if(d[xx][yy]==4)
        {
            for(int i=0;i<1;i++)
            {
                ddfs(xx+x1[i],yy+y1[i]);
                if(shit==1){return;}
            }
        }
        return;
    }
    void dfs(int xx,int yy)//3 0
    {
        if(lable[xx][yy]==1||d[xx][yy]==0||xx<0||yy<0){return;}
        lable[xx][yy]=1;
        for(int i=0;i<y;i++)
        {
            for(int j=0;j<x;j++)
            {
                labll[i][j]=0;
            }
        }
        shit=0;
        ddfs(xx,yy);
        if(shit==0){numb++;}
        if(d[xx][yy]==1)
        {
            for(int i=0;i<4;i++)
            {
                dfs(xx+x1[i],yy+y1[i]);
            }
        }
        if(d[xx][yy]==2)
        {
            for(int i=2;i<4;i++)
            {
                dfs(xx+x1[i],yy+y1[i]);
            }
        }
        if(d[xx][yy]==3)
        {
            for(int i=0;i<2;i++)
            {
                dfs(xx+x1[i],yy+y1[i]);
            }
        }
        if(d[xx][yy]==4)
        {
            for(int i=0;i<1;i++)
            {
                dfs(xx+x1[i],yy+y1[i]);
            }
        }
        return;
    }
    
    int main()
    {
        while(cin>>y>>x)
        {
            char c;
            numb=0;
            for(int i=0;i<y;i++)
            {
                for(int j=0;j<x;j++)
                {
                    cin>>c;
                    if(c=='S'){d[i][j]=1;ax=j;ay=i;}
                    if(c=='T'){d[i][j]=1;bx=j;by=i;}
                    if(c=='#'){d[i][j]=0;}
                    if(c=='+'){d[i][j]=1;}
                    if(c=='-'){d[i][j]=2;}
                    if(c=='|'){d[i][j]=3;}
                    if(c=='.'){d[i][j]=4;}
                }
            }
            shit=0;
            ddfs(ay,ax);
            if(shit==0){cout<<"I'm stuck!"<<endl;continue;}
            dfs(ay,ax);
            cout<<numb<<endl;
            for(int i=0;i<y;i++)
            {
                for(int j=0;j<x;j++)
                {
                    d[i][j]=lable[i][j]=0;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    业务逻辑层封装
    了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult
    Facade外观模式
    了解ASP.NET MVC几种ActionResult的本质:FileResult
    示例代码浏览器5.4功能更新
    面试体验:Microsoft 篇
    Mono 2.11.3 发布包含微软的 Entity Framework
    系统架构设计师
    对数据访问层的抽象中
    说说项目中的插件思想
  • 原文地址:https://www.cnblogs.com/dzzy/p/5330919.html
Copyright © 2020-2023  润新知