宽搜基础题

思路很简单,注意细节。

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

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

 #include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <string>
#include <string.h>
#include <math.h>
#include <queue>
#define MAXN 35 using namespace std; int L,R,C;
char a[MAXN][MAXN][MAXN];
int tag[MAXN][MAXN][MAXN];
int ans;
struct pos{
int x,y,z;
int t;
};
pos start;
int dx[] = {, , -, , , }, dy[] = {, , , -, ,},dz[] = {, , , ,,-}; int judge(int nx,int ny,int nz)
{
if( <= nx && nx < L && <= ny && ny < R && <= nz && nz < C)
return ;
else return ;
}
int bfs()
{
queue<pos> que;
que.push(start);
while(!que.empty())
{
pos temp = que.front();
que.pop();
for(int i = ;i<;i++)
{
int nx = temp.x-dx[i],ny = temp.y-dy[i],nz = temp.z-dz[i];
if(a[nx][ny][nz] == 'E')
{
printf("Escaped in %d minute(s).\n",temp.t+);
return ;
}
if(judge(nx,ny,nz) && a[nx][ny][nz]=='.'&&!tag[nx][ny][nz])
{
pos now;
now.x = nx;now.y = ny;now.z = nz;
now.t = temp.t+;
tag[nx][ny][nz] = ;
que.push(now);
}
}
}
return ;
}
int main()
{
freopen("caicai.txt","r",stdin);
while(cin>>L>>R>>C , L&&R&&C)
{
memset(a,,sizeof(a));
memset(tag,,sizeof(tag));
int i,j,k;
for(i = ;i<L;i++)
for(j = ;j<R;j++)
{
for(k = ;k<C;k++)
{
cin>>a[i][j][k];
if(a[i][j][k] == 'S')
{
start.x = i;start.y = j;start.z = k;start.t = ;
tag[i][j][k] = ;
}
}
getchar();//一定要记得getchar;
}
if(!bfs())
cout<<"Trapped!\n";
}
return ;
}
//如下也是对的(●'◡'●) // for(i = 0;i<L;i++)
// for(j = 0;j<R;j++)
// {
// cin>>a[i][j];
// for(k = 0;k<C;k++)
// {
// if(a[i][j][k] == 'S')
// {
// start.x = i;start.y = j;start.z = k;start.t = 0;
// tag[i][j][k] = 1;
// }
// }
// }

附:字符串输入总结

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

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

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

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

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

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

cin>>:

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

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

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

输出:

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

bfs简单题-poj2251的更多相关文章

  1. BFS简单题套路_Codevs 1215 迷宫

    BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 ; struct Status { int r, c; Status(, ) : r(r), c(c) {} // ...

  2. 胜利大逃亡(杭电hdu1253)bfs简单题

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. POJ-2251 Dungeon Master (BFS模板题)

    You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...

  4. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  5. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

  6. BZOJ 2683: 简单题

    2683: 简单题 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 913  Solved: 379[Submit][Status][Discuss] ...

  7. 【BZOJ-1176&2683】Mokia&简单题 CDQ分治

    1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 1854  Solved: 821[Submit][St ...

  8. Bzoj4066 简单题

    Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 2185  Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...

  9. Bzoj2683 简单题

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1071  Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...

随机推荐

  1. trie树---(插入、删除、查询字符串)

    HDU   5687 Problem Description 度熊手上有一本神奇的字典,你可以在它里面做如下三个操作:  1.insert : 往神奇字典中插入一个单词  2.delete: 在神奇字 ...

  2. 初学Java9:学习Mybatis时报错:Parameter 'name' not found. Available parameters are [1, 0, param1, param2]

    报错-->Parameter 'name' not found. Available parameters are [1, 0, param1, param2] 百度找到这篇文章完成修改 htt ...

  3. phpcms v9 升级视频云问题推荐位不能添加

    因为使用的是v9的早期版本,后来升级的时候没敢升级数据库,直接使用了老的数据库结构,造成[推荐位]添加不能使用,报告没有thumb列. 查看数据库果然没有,没办法要么添加相关的列,要么禁用上传缩略图. ...

  4. 【OpenCV】OpenCV中GPU模块使用

    CUDA基本使用方法 在介绍OpenCV中GPU模块使用之前,先回顾下CUDA的一般使用方法,其基本步骤如下: 1.主机代码执行:2.传输数据到GPU:3.确定grid,block大小: 4.调用内核 ...

  5. linux环形buff模拟多线程信号量操作

    互斥锁mutex变量的值非0即1,只能用来表示两种状态下的临界资源.而信号量是与之类似的,用来表示可用资源的,区别在于,信号量可以表示多个可用资源的. --值为2的信号量也就是特殊的互斥锁了. 那么下 ...

  6. 总结一下SQL的全局变量

    SQL Server 2008中的全局变量及其用法 T-SQL程序中的变量分为全局变量和局部变量两类,全局变量是由SQL Server系统定义和使用的变量.DBA和用户可以使用全局变量的值,但不能自己 ...

  7. 怎样高效地去判断Array中是否包含某个值?

    问题 怎样去判断Array(无序)中是否包含某个值呢? 这是一个在Java中经常被问到的问题.它也是Stack Overflow上投票前几的一个问题.下面将展示投票前几的几个回答,这些回答使用不同的方 ...

  8. [Architecture Design] 累进式Domain Layer

    [Architecture Design] 累进式Domain Layer 前言 本篇的内容大幅度的简化了分析设计.面向对象等等相关知识,用以传达累进式Domain Layer的核心概念.实际开发软件 ...

  9. [HTML5] 飞龙天惊-HTML5学习系列

    飞龙天惊 cnblog URL:http://www.cnblogs.com/fly_dragon/ Html5 学习系列(一)认识HTML5 http://www.cnblogs.com/fly_d ...

  10. .NET WinForm画树叶小程序

    看了一片文章(http://keleyi.com/a/bjac/nurox416.htm),是使用分型画树叶,代码是Java的,因为Java很久没弄了,改用C#实现,下载地址: 画树叶小程序下载 核心 ...