• HDU 1240 (简单三维广搜) Asteroids!


    给出一个三维的迷宫以及起点和终点,求能否到大终点,若果能输出最短步数

    三维的问题无非就是变成了6个搜索方向

    最后强调一下xyz的顺序,从输入数据来看,读入的顺序是map[z][x][y]

    总之,这是很基础的一道题

     1 //#define LOCAL
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <queue>
     6 #include <algorithm>
     7 using namespace std;
     8 
     9 struct Point
    10 {
    11     char type;
    12     int x, y, z;
    13     int steps;
    14 }start, end;
    15 
    16 char map[12][12][12];
    17 int dir[6][3] = {{1,0,0}, {-1,0,0}, {0,1,0}, {0,-1,0}, {0,0,1}, {0,0,-1}};
    18 char buff[10];
    19 int n;
    20 
    21 bool islegal(int x, int y, int z)
    22 {
    23     return (x>=0 && x<n && y>=0 && y<n && z>=0 && z<n && map[z][x][y]!='X');
    24 }
    25 
    26 void BFS(void)
    27 {
    28     queue<Point> qu;
    29     start.steps = 0;
    30     qu.push(start);
    31     while(!qu.empty())
    32     {
    33         Point now = qu.front();
    34         if(now.x==end.x && now.y==end.y && now.z==end.z)
    35         {
    36             printf("%d %d
    ", n, now.steps);
    37             return;
    38         }
    39         for(int i = 0; i < 6; ++i)
    40         {
    41             int xx = now.x + dir[i][0];
    42             int yy = now.y + dir[i][1];
    43             int zz = now.z + dir[i][2];
    44             if(islegal(xx, yy, zz))
    45             {
    46                 Point next;
    47                 next.x = xx, next.y = yy, next.z = zz, next.steps = now.steps + 1;
    48                 map[zz][xx][yy] = 'X';
    49                 qu.push(next);
    50             }
    51         }
    52         qu.pop();
    53     }
    54     printf("NO ROUTE
    ");
    55 }
    56 
    57 int main(void)
    58 {
    59     #ifdef LOCAL
    60         freopen("1240in.txt", "r", stdin);
    61     #endif
    62 
    63     while(cin >> buff >> n)
    64     {
    65         for(int i = 0; i < n; ++i)
    66             for(int j = 0; j < n; ++j)
    67                 cin >> map[i][j];
    68 
    69         cin >> start.x >> start.y >> start.z;
    70         cin >> end.x >> end.y >> end.z;
    71         cin >> buff;
    72         BFS();
    73     }
    74     return 0;
    75 }
    代码君
  • 相关阅读:
    P1352 没有上司的舞会(树形DP入门,自底向上更新)
    链表和函数指针
    c语言中文件操作
    数据结构中的栈和堆与计算机内存划分的栈区和堆区的区别
    计算机组成原理—cpu
    Linux中一切皆文件
    G 火山哥周游世界(树上走过确切k个点的最短时间,树形dp)
    Paint Box(涂色要求相邻不能同色,求方案数,容斥)
    失衡天平
    hdu6761lyndon分解
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/3913755.html
Copyright © 2020-2023  润新知