• poj-2251


    题意:

    首先会输入个 数l,r,c 接下来会如数l个r*c的矩阵,其实点为S,结束点为E,每个点都可以向六个方向走,东,南,西,北,上,下,求从起始点到结束点的最短路径。

     

    Sample Input

    3 4 5
    S....
    .###.
    .##..
    ###.#
    
    #####
    #####
    ##.##
    ##...
    
    #####
    #####
    #.###
    ####E
    
    1 3 3
    S##
    #E#
    ###
    
    0 0 0

    解题思路:
    其实看到最短路径就该想到用BFS求解,但是在POJ分类上是分为DFS的,但是DFS不知道该怎么求解。若用BFS其实就跟二维的BFS是一样的,就是三维的多了两个方向,并且在判断的时候
    也需要加一些条件。并且开数组的时候要尽量开的大一些,开小了会RE。

    具体代码:
     1 #include<iostream>
     2 #include<queue>
     3 #include<cstring>
     4 #include<stdio.h>
     5 using namespace std;
     6 char map[40][40][40];
     7 bool visit[40][40][40];
     8 int xx[]={1,-1,0,0,0,0};  
     9 int yy[]={0,0,0,0,-1,1};  
    10 int zz[]={0,0,-1,1,0,0}; 
    11 
    12 int beginx,beginy,beginz;
    13 struct Node
    14 {
    15     int l,r,c;
    16     int step;
    17     Node (int l1,int r1,int c1,int step1):l(l1),r(r1),c(c1),step(step1){}; 
    18 };
    19 int h,g,f;
    20 int length[30000]; 
    21 int bfs()
    22 {
    23     queue<Node> q;
    24     Node node(beginx,beginy,beginz,0);
    25     memset(visit,false,sizeof(visit));
    26     memset(length,0,sizeof(length));
    27     while(!q.empty()) q.pop();
    28     q.push(node);
    29     while(!q.empty())
    30     {
    31         node=q.front();
    32         q.pop();
    33         if(map[node.l][node.r][node.c]=='E')
    34             return node.step;
    35         for(int i=0;i<6;i++)
    36         {
    37             int x=node.l+xx[i];
    38             int y=node.r+yy[i];
    39             int z=node.c+zz[i];
    40             if(x>=0&&x<=h&&y>=0&&y<=g&&z>=0&&z<=f&&!visit[x][y][z]&&(map[x][y][z]=='.'||map[x][y][z]=='E'))
    41             {
    42                 visit[x][y][z]=true;
    43                 Node temp(x,y,z,node.step+1);
    44                 q.push(temp);
    45                 
    46             }
    47         }
    48     }
    49     return 0;
    50 }
    51 int main()
    52 {
    53     while(1)
    54     {
    55         cin>>h>>g>>f;
    56         if(h==0&&g==0&&f==0)
    57             break;
    58         for(int i=0;i<h;i++)
    59             for(int j=0;j<g;j++)
    60                 for(int k=0;k<f;k++)
    61                 {
    62                     cin>>map[i][j][k];
    63                     if(map[i][j][k]=='S')
    64                     {
    65                         beginx=i;
    66                         beginy=j;
    67                         beginz=k;
    68                     }
    69                     
    70                 }
    71         int tempd=bfs();
    72         if(tempd) printf("Escaped in %d minute(s).
    ",tempd);  
    73         else printf("Trapped!
    ");  
    74     }
    75     //system("pause");
    76     return 0;
    77 }
    View Code
  • 相关阅读:
    TCHAR转化为UTF8
    Chromium ID 计算方法
    构建之法感悟
    项目名称:上海地铁游
    统一入口的Ajax验证
    基于用户体验的服务型政府网站群建设优化方案
    新技术下的政府门户网站群建设建议
    国内CMS技术发展的外在表现形式
    JavaScript基础 BOM
    JavaScript基础 常见DOM树操作
  • 原文地址:https://www.cnblogs.com/baoluqi/p/3710311.html
Copyright © 2020-2023  润新知