zoukankan      html  css  js  c++  java
  • Poj(2225),三维BFS

    题目链接:http://poj.org/problem?id=2225

    这里要注意的是,输入的是坐标x,y,z,那么这个点就是在y行,x列,z层上。

    我竟然WA在了结束搜索上了,写成了输出s.step.我要调疯了。

    #include <stdio.h>
    #include <queue>
    #include <string.h>
    
    using namespace std;
    
    struct Point
    {
        int x,y,z;
        int step;
    } points[1005];
    
    char maps[15][15][15];
    bool vis[15][15][15];
    
    ///上下前后左右
    int to[6][3]= {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,-1},{0,0,1}};
    
    int main()
    {
        char str[20];
        while(scanf("%s",str)!=EOF)
        {
            memset(vis,false,sizeof(vis));
    
            int n;
            scanf("%d",&n);
            for(int i=0; i<n; i++)
                for(int j=0; j<n; j++)
                    scanf("%s",maps[i][j]);
    
            int x1,y1,z1;   ///x 行,y列,z层
            int x2,y2,z2;
            scanf("%d%d%d%d%d%d",&y1,&x1,&z1,&y2,&x2,&z2);
    
            char tmp[20];
            scanf("%s",tmp);
    
            queue<Point> Q;
            Point s,next;
            s.x = x1;
            s.y = y1;
            s.z = z1;
            s.step = 0;
            Q.push(s);
            vis[s.z][s.x][s.y] = true;
            int ans = 0;
            bool flag = false;
    
            while(!Q.empty())
            {
                Point f;
                f = Q.front();
                Q.pop();
                if(f.x==x2&&f.y==y2&&f.z==z2)
                {
                    flag = true;
                    ans = f.step;
                    break;
                }
                for(int i=0; i<6; i++)
                {
                    next.x = f.x + to[i][1];
                    next.y = f.y + to[i][2];
                    next.z = f.z + to[i][0];
    
    
                    if(next.x<0||next.x>=n||next.y<0||next.y>=n||next.z<0||next.z>=n)
                        continue;
                    if(vis[next.z][next.x][next.y]||maps[next.z][next.x][next.y]=='X')
                        continue;
    
                    next.step = f.step + 1;
                    //printf("%d %d %d ",next.x,next.y,next.z);
                    //printf("%d
    ",next.step);
                    vis[next.z][next.x][next.y] = true;
                    Q.push(next);
                }
            }
            if(flag)
                printf("%d %d
    ",n,ans);
            else printf("NO ROUTE
    ");
        }
        return 0;
    }
  • 相关阅读:
    GitHub之fetch:更新fork后的项目
    实验二 结对编程 第一阶段
    博客园之鼠标点击特效
    博客园之鼠标粒子吸附特效
    实验五 单元测试
    实验四 代码评审
    第三次实验 UML 建模工具的安装与使用
    结对编程(阶段二)
    结对编程第一阶段
    实验一 GIT 代码版本管理
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5711998.html
Copyright © 2011-2022 走看看