zoukankan      html  css  js  c++  java
  • Virtual Judge POJ 2251 Dungeon Master

    三维数组加宽搜

    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    const int  MAXN=50;
    int c, k, h;
    char ma[MAXN][MAXN][MAXN];  //定义三维数组  长宽高
    int visit[MAXN][MAXN][MAXN];  //标记数组
    struct node {
        int c, k, h;//结构体记录到达某个点  c长k宽h高
        int step;//走的步数
    };
    struct node t[33433];//结构体队列
    struct node p, q, w, l;
    int f[][3] = {0,0,1, 0,0,-1, 0,1,0, 0,-1,0, 1,0,0, -1,0,0};//向上下左右前后六个方向移动  包括上楼
    void bfs() {
        visit[p.c][p.k][p.h] = 1;//标记已经走过
        int front = 0, rear = 0;
        t[rear++] = p;//入队
        while(front!=rear) { //当队列不为空的时候
            w = t[front++];
            if(w.c==q.c&&w.k==q.k&&w.h==q.h) { //如果是终点,直接输出
                printf("Escaped in %d minute(s).
    ", w.step);
                return ;
            }
            for(int i=0; i<6; i++) { //否则,遍历六个方向
                l = w;
                l.c += f[i][0];
                l.k += f[i][1];
                l.h += f[i][2];
                if(l.c>=0&&l.c<c&&l.k>=0&&l.k<k&&l.h>=0&&l.h<h&&ma[l.c][l.k][l.h]!='#'&&visit[l.c][l.k][l.h]==0) { //如果符合条件
                    l.step++;//步数增加
                    visit[l.c][l.k][l.h] = 1;//标记访问过了
                    t[rear++] = l;//入列
                }
            }
        }
        printf("Trapped!
    ");//否则,输出无法到达
    }
    int main() {
        memset(t, 0, sizeof(struct node));  //先清空
        while(~scanf("%d %d %d", &c, &k, &h)) { //c长k宽h高
            if(c==0&&k==0&&h==0) break;
            for(int i=0; i<c; i++) {
                for(int j=0; j<k; j++) {
                    scanf("%s", ma[i][j]);//按照字符串输入
                    for(int w = 0; w<h; w++) {
                        if(ma[i][j][w]=='S') { //记录起点
                            p.c = i;
                            p.k = j;
                            p.h = w;
                            p.step = 0;
                        } else if(ma[i][j][w]=='E') { //记录终点
                            q.c = i;
                            q.k = j;
                            q.h = w;
                        }
                    }
                }
            }
            memset(visit, 0, sizeof(visit));//清空标记数组
            bfs();//广搜
        }
        return 0;
    }
  • 相关阅读:
    开发一个struts2的实例
    5个让DBA爱上你的SQL技巧
    实现struts2框架
    8张图带你理解Java整个只是网络(转载)
    jQuery实例属性和方法
    jQuery扩展工具方法
    javaEE的十三个技术规范
    Spring学习笔记5---cope(作用越)理解
    Spring学习笔记4----Spring IOC例子
    Spring学习笔记3---Spring简介
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11746390.html
Copyright © 2011-2022 走看看