zoukankan      html  css  js  c++  java
  • bfs简单题-poj2251

    宽搜基础题

    思路很简单,注意细节。

    走过的节点一定要打上标记//tag数组

    三维字符串输入一定要注意

     1 #include <stdio.h>
     2 #include <iostream>
     3 #include <string>
     4 #include <algorithm>
     5 #include <string>
     6 #include <string.h>
     7 #include <math.h>
     8 #include <queue>
     9 #define MAXN 35
    10 
    11 using namespace std;
    12 
    13 int L,R,C;
    14 char a[MAXN][MAXN][MAXN];
    15 int tag[MAXN][MAXN][MAXN];
    16 int ans;
    17 struct pos{
    18     int x,y,z;
    19     int t;
    20 };
    21 pos start;
    22 int dx[6] = {1, 0, -1, 0 , 0 , 0}, dy[6] = {0, 1, 0, -1,0 ,0},dz[6] = {0, 0, 0, 0,1,-1};
    23 
    24 int judge(int nx,int ny,int nz)
    25 {
    26     if(0 <= nx && nx < L && 0 <= ny && ny < R && 0 <= nz && nz < C)
    27         return 1;
    28     else return 0;
    29 }
    30 int bfs()
    31 {
    32     queue<pos> que;
    33     que.push(start);
    34     while(!que.empty())
    35     {
    36         pos temp = que.front();
    37         que.pop();
    38         for(int i = 0;i<6;i++)
    39         {
    40             int nx = temp.x-dx[i],ny = temp.y-dy[i],nz = temp.z-dz[i];
    41             if(a[nx][ny][nz] == 'E')
    42             {
    43                 printf("Escaped in %d minute(s).
    ",temp.t+1);
    44                 return 1;
    45             }
    46             if(judge(nx,ny,nz) && a[nx][ny][nz]=='.'&&!tag[nx][ny][nz])
    47             {
    48                 pos now;
    49                 now.x = nx;now.y = ny;now.z = nz;
    50                 now.t = temp.t+1;
    51                 tag[nx][ny][nz] = 1;
    52                 que.push(now);
    53             }
    54         }
    55     }
    56     return 0;
    57 }
    58 int main()
    59 {
    60     freopen("caicai.txt","r",stdin);
    61     while(cin>>L>>R>>C , L&&R&&C)
    62     {
    63         memset(a,0,sizeof(a));
    64         memset(tag,0,sizeof(tag));
    65         int i,j,k;
    66         for(i = 0;i<L;i++)
    67             for(j = 0;j<R;j++)
    68             {
    69                 for(k = 0;k<C;k++)
    70                 {
    71                     cin>>a[i][j][k];
    72                     if(a[i][j][k] == 'S')
    73                        {
    74                            start.x = i;start.y = j;start.z = k;start.t = 0;
    75                            tag[i][j][k] = 1;
    76                        }
    77                 }
    78                 getchar();//一定要记得getchar;
    79             }
    80         if(!bfs())
    81             cout<<"Trapped!
    ";
    82     }
    83     return 0;
    84 }
    85 //如下也是对的(●'◡'●)
    86 
    87 //        for(i = 0;i<L;i++)
    88 //            for(j = 0;j<R;j++)
    89 //            {
    90 //                cin>>a[i][j];
    91 //                for(k = 0;k<C;k++)
    92 //                {
    93 //                    if(a[i][j][k] == 'S')
    94 //                       {
    95 //                           start.x = i;start.y = j;start.z = k;start.t = 0;
    96 //                           tag[i][j][k] = 1;
    97 //                       }
    98 //                }
    99 //            }

     

    附:字符串输入总结

    scanf不能接受空格、制表符Tab、回车等;

    而gets能够接受空格、制表符Tab和回车等;

    二者字符串接受结束后自动加''。

    (没明白看这句话:scanf("%s",str)在遇到' '(回车)或' '(空格)时输入结束,但' '(回车)或' '(空格)停留在出入缓冲区,如处理不慎会影响下面的输入;gets(str)遇到' '(回车)时输入结束,但' '(回车)已被替换为'', 存储于字符串中,输入缓冲中没有遗留的' '(回车),不会影响后续的输入。)

    使用scanf("%s",&s);函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。

    当需要输入带空格的字符串时用gets(),但是保证之前没有输入回车,如果有回车的话要getchar();

    cin>>:

    输入结束条件 :遇到Enter、Space、Tab键。

    对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)

    运算符>>的作用是跳过空白,读入后面的非空白字符,直到遇到另一个空白字符为止,并在串尾放一个字符

    输出:

    printf(“%s”,str)和puts(str)均是输出到''结束,遇到空格不停,但puts(str)会在结尾输出' ',printf(“%s”,str)不会换行。printf(“%s ”,str)可以替换puts(str)。

  • 相关阅读:
    poj 3068 Bridge Across Islands
    XidianOJ 1086 Flappy v8
    XidianOJ 1036 分配宝藏
    XidianOJ 1090 爬树的V8
    XidianOJ 1088 AK后的V8
    XidianOJ 1062 Black King Bar
    XidianOJ 1091 看Dota视频的V8
    XidianOJ 1098 突击数论前的xry111
    XidianOJ 1019 自然数的秘密
    XidianOJ 1109 Too Naive
  • 原文地址:https://www.cnblogs.com/caitian/p/5381618.html
Copyright © 2011-2022 走看看