zoukankan      html  css  js  c++  java
  • zoj1940

    链接:点击打开链接

    题意:三维搜索‘S’为起点,‘E’为终点,求走出的最短时间

    代码:

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <queue>
    using namespace std;
    int xx[]={1,-1,0,0,0,0};                            //方向向量
    int yy[]={0,0,1,-1,0,0};
    int zz[]={0,0,0,0,1,-1};
    int p,q,r;
    char str[35][35][35];
    struct node{
        int x,y,z,sum;
    };
    int bfs(node st,node en){
        int i;
        queue<node>qu;
        node cur,temp;
        qu.push(st);
        while(qu.size()){
            cur=qu.front();qu.pop();
            if(cur.x==en.x&&cur.y==en.y&&cur.z==en.z)
            return cur.sum;                          //找到之后直接返回走的步数
            for(i=0;i<6;i++){
                temp.x=cur.x+xx[i];
                temp.y=cur.y+yy[i];
                temp.z=cur.z+zz[i];
                temp.sum=cur.sum+1;
                if(temp.x>=0&&temp.x<p&&temp.y>=0&&temp.y<q&&temp.z>=0&&temp.z<r)
                if(str[temp.x][temp.y][temp.z]!='#'){
                qu.push(temp);
                str[temp.x][temp.y][temp.z]='#';       //走过之后就变成'#',省掉一个数组记录
                }                                      //是否走过
            }
        }
        return -1;
    }
    int main(){
        int i,j,k,sumsum;
        node st,en;
        while(scanf("%d%d%d",&p,&q,&r)!=EOF&&(p||q||r)){
            for(i=0;i<p;i++)
            for(j=0;j<q;j++)
            for(k=0;k<r;k++){
                cin>>str[i][j][k];
                if(str[i][j][k]=='S')
                st.x=i,st.y=j,st.z=k,st.sum=0;
                else if(str[i][j][k]=='E')
                en.x=i,en.y=j,en.z=k;
            }
            sumsum=bfs(st,en);
            if(sumsum==-1)
            printf("Trapped!
    ");
            else
            printf("Escaped in %d minute(s).
    ",sumsum);
        }
        return 0;
    }
    

  • 相关阅读:
    继承与多态,Instanceof关键字
    面向对象,单例模式
    方法
    数组
    流程控制
    基础语法
    连接linux四大远程工具
    MYSQL-索引的设计
    银行一类(Ⅰ类)、二类(Ⅱ类)、三类(Ⅲ类)账户区别是什么?
    真正有效的学习
  • 原文地址:https://www.cnblogs.com/llguanli/p/6945225.html
Copyright © 2011-2022 走看看