zoukankan      html  css  js  c++  java
  • poj 2935 Basic Wall Maze

    是一个图论的基础搜索题~

    没什么好说的就是搜索就好 主要是别把 代码写的太屎,错了不好找

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    using namespace std;
    int sx,sy,ex,ey;
    struct info
    {
        int x,y;
        char ko;
        int qian;
    };
    info que[40];
    bool flag[10][10];
    int n,m;
    bool vi[10][10][4];
    int d[4][2]={-1,0,1,0,  0,-1,  0,  1};
    char dd[5]={"WENS"};
    void print(int p)
    {
        if(p!=0) print(que[p].qian);
        if(p!=0)printf("%c",que[p].ko);
    }
    bool jude(int x,int y)
    {
        return x>=1&&y>=1&&x<=6&&y<=6&&flag[x][y]==0;
    }
    void solve()
    {
        int h=0,r=1;
        int x,y,x0,y0;
        que[0].x=sx,que[0].y=sy;
        flag[sx][sy]=1;
        while(h!=r)
        {
            x=que[h].x;
            y=que[h].y;
            h++;
            for(int i=0;i<4;i++)
            {
                if(vi[x][y][i])
                {
                    x0=x+d[i][0];
                    y0=y+d[i][1];
                    if(jude(x0,y0))
                    {
                        flag[x0][y0]=1;
                        que[r].x=x0;
                        que[r].y=y0;
                        que[r].qian=h-1;
                        que[r].ko=dd[i];
                        if(x0==ex&&y0==ey) {print(r);return ;}
                        r++;
                    }
                }
            }
        }
    }
    int main()
    {
        int a,b,c,d;
        while(~scanf("%d%d",&sx,&sy))
        {
            if(sx==0&&sy==0) break;
            memset(vi,1,sizeof(vi));
            memset(flag,0,sizeof(flag));
            scanf("%d%d",&ex,&ey);
            for(int i=0;i<3;i++)
            {
                scanf("%d%d%d%d",&a,&b,&c,&d);
                if(a==c)
                {
                    for(int i=min(b,d)+1;i<=max(b,d);i++)
                        vi[a][i][1]=0,vi[a+1][i][0]=0;
                }
                else if(b==d)
                {
                    for(int i=min(a,c)+1;i<=max(a,c);i++)
                        vi[i][b][3]=0,vi[i][b+1][2]=0;
                }
            }
            solve();printf("
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    《程序员修炼之道:从小工到专家》读后感2
    Java第五节课总结
    FirstJavaWeb
    Java第四节课总结
    《程序员修炼之道:从小工到专家》读后感1
    Java第三节课总结
    递归回文
    原码、补码和反码
    Java第二节课总结
    C++ STL的容器类型
  • 原文地址:https://www.cnblogs.com/shuly/p/3459927.html
Copyright © 2011-2022 走看看