DESCRIPTION:
给你一个三维的迷宫。问你是否能从起点走到终点。如果能,输出最小步数。对我来说难得就是我没有想到怎么把他给你的三维图转换成map。恩。、好像解题报告上说。只要是这种的最短路都要用bfs。用dfs回很难。不太懂耶。>_<...

然后就是普通的bfs了。然后忘了三个输入全为0的时候结束程序。然后WA了一会。。然后就没有然后了。233333333333

附代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;

int l, r, c;
int ans;
bool used[40][40][40];
bool map[40][40][40];

struct Node
{
    int l, r, c;
    int step;
    Node()
    {
        step = 0;
    }
}node[30000], now, temp, st, ed;

int move[6][3] = {0, 0, 1,  0, 0, -1,  0, 1, 0,  0, -1, 0,  1, 0, 0, -1, 0, 0};

bool check(int l, int r, int c)
{
    if (l >= 0 && l < 30 && r >= 0 && r < 30 && c >= 0 && c < 30 && !used[l][r][c] && map[l][r][c])
        return true;
    return false;
}

bool bfs(int i, int j, int k)
{
     int top = 0;
     int tail = 0;
     node[tail++] = st;
     used[st.l][st.r][st.c] = 1;
     while(top < tail)
     {
         now = node[top++];
         if (now.l == ed.l && now.r == ed.r && now.c == ed.c)
         {
             ans = now.step;
             return true;
         }
         for (int i=0; i<6; ++i)
         {
             temp.l = now.l + move[i][0];
             temp.r = now.r + move[i][1];
             temp.c = now.c + move[i][2];
             if (check(temp.l, temp.r, temp.c))
             {
                 temp.step = now.step + 1;
                 node[tail++] = temp;
                 used[temp.l][temp.r][temp.c] = true;
             }
         }
     }
     return false;
}

int main()
{
    char t;
    while(cin >> l)
    {
        cin >> r >> c;
        if (l == 0 && r == 0 && c == 0)
            break;
        memset(used, 0, sizeof(used));
        memset(map, 0, sizeof(map));
        for (int ll=0; ll<l; ++ll)
        {
            for (int rr=0; rr<r; ++rr)
            {
                for (int cc=0; cc<c; ++cc)
                {
                    cin >> t;
                   if (t == 'S')
                   {
                     map[ll][rr][cc] = true;
                     st.l = ll;
                     st.r = rr;
                     st.c = cc;
                     st.step = 0;
                   }
                   if (t == '.')
                    map[ll][rr][cc] = true;
                   if (t == 'E')
                   {
                       map[ll][rr][cc] = true;
                       ed.l = ll;
                       ed.r = rr;
                       ed.c = cc;
                   }
                }
            }
        }
        if (bfs(st.l, st.r, st.c))
            cout << "Escaped in " << ans << " minute(s)." << endl;
        else cout << "Trapped!\n";
    }
    return 0;
}

最新文章

  1. AVL树
  2. OpenCASCADE Make Primitives-Box
  3. SVN中trunk、branches、tag的使用
  4. 解释一下SQLSERVER事务日志记录
  5. wpf template的code写法
  6. Asp.net mvc5 系列笔记
  7. HADOOP NAMENODE对Image和edits的处理
  8. VS2010打开VS2012解决方法
  9. ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中
  10. 【转】Android 带checkbox的listView 实现多选,全选,反选 -- 不错
  11. GridBagLayout练习
  12. CentOS 7 源码编译安装 Nginx
  13. 关于ajax及相关数据传输问题
  14. gitlab提交代码
  15. 79、iOS 的Cocoa框架、Foundation框架以及UIKit框架
  16. Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
  17. c++ 编译报错汇总(随时更新)
  18. centos-yum离线源
  19. mybatis入门--初识mybatis
  20. C# int转string 每三位加一个逗号

热门文章

  1. 20145305 《网络对抗》注入Shellcode并执行&amp;Return-to-libc 攻击实验
  2. bzoj 2654 tree - 二分法 - 最小生成树
  3. codevs 1380 没有上司的舞会 - 树形动态规划
  4. Python3基础 os chdir 改变工作目录
  5. 记录openwrt下补丁apply的过程中出错,但是可以单独打上该补丁
  6. P3938 斐波那契
  7. ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 80 Days(尺取)题解
  8. POJ1251 Jungle Roads (最小生成树&amp;Kruskal&amp;Prim)题解
  9. HDU 2157(矩阵快速幂)题解
  10. [shiro] - 怎样使用shiro?