• hdu 1240 Asteroids! 三维 BFS


    N表示三维图的大小(x,y,z为零到N-1),然后是一个三维图,最后是起点和终点的座标。
    答案输出N和从起点到终点走的步数。
    和hdu1253差不多的题目,并且本题不用剪技,直接BFS搜一遍就可以了。
     
     

    #include<stdio.h>
    #include<stdlib.h>
    #include<queue>
    #include<string.h>
    #include <iostream>
    using namespace std;
    char map[11][11][11];
    int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
    int visited[11][11][11];
    int N;
    struct coor
    {
        int x,y,z;
        int step;
    }s[2];
    bool judge(int x,int y,int z)
    {
        if(x<0||y<0||z<0||x>=N||y>=N||z>=N||map[x][y][z]=='X'||visited[x][y][z])
        return false;
        return true;
    }
    queue<coor>que;
    bool bfs()
    {
        int i,x,y,z;
        coor in,out;
        memset(visited,0,sizeof(visited));
        while(!que.empty())
        que.pop();
        in.x=s[0].x;
        in.y=s[0].y;
        in.z=s[0].z;
        in.step=0;
        que.push(in);
        while(!que.empty())
        {
            out=que.front();
            que.pop();
            if(out.x==s[1].x&&out.y==s[1].y&&out.z==s[1].z)
            {
                printf("%d %d\n",N,out.step);
                return true;
            }
            for(i=0;i<6;i++)
            {
                x=out.x+dir[i][0];
                y=out.y+dir[i][1];
                z=out.z+dir[i][2];
                if(!judge(x,y,z))
                continue;
                visited[x][y][z]=1;
                in.x=x;
                in.y=y;
                in.z=z;
                in.step=out.step+1;
                que.push(in);
            }
        }
        return false;
    }
               
       
       
    int main()
    {
        int i,j;
        char p[10],q[10];
        while(scanf("%s%d",p,&N)!=EOF)
        {
            scanf("%d",&N);
            for(i=0;i<N;i++)
            for(j=0;j<N;j++)
            scanf("%s",map[i][j]);
            for(i=0;i<2;i++)
            scanf("%d%d%d",&s[i].z,&s[i].y,&s[i].x);
            scanf("%s",q);
            if(!bfs())
            printf("NO ROUTE\n");
        }
        return 0;
    }
           

  • 相关阅读:
    android之间传递list
    android 中string.xml中的%1$s
    android activity传递实体类对象
    android 通过getDimension,getDimensionPixelOffset和getDimensionPixelSize获取dimens.xml文件里面的变量值
    android 获取屏幕的宽和高
    android dialog弹出的情况下监听返回键
    join on用法
    android webview加载网络连接
    HDU 5025 Saving Tang Monk 【状态压缩BFS】
    ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A、Saving Tang Monk II 【状态搜索】
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740270.html
Copyright © 2020-2023  润新知