BFS简单题套路_Codevs 1215 迷宫
BFS 简单题套路
1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明
const int maxn = ;
struct Status {
int r, c;
Status(int r = , int c = ) : r(r), c(c) {}
// int DIR;
};
int N; //迷宫数量
int W; //迷宫宽度
char map[maxn][maxn]; //地图
//方向 : 分别代表 上、右、下、左向量
int dir[][] = { {-, }, {, }, {, }, {, -} };
bool vis[maxn][maxn];
//队列
queue<Status> que; void input(); //输入数据
bool judge(int r, int c);//判断是否越界, 是否是路
bool check(int r, int c);//判断当前是否到达终点
//移动一步
void Move(const Status& now, int r, int c, int k);
void BFS(); //BFS搜索
void solve();
2. 随后再逐个函数的实现
//完整代码
/*
* Codevs 1215 迷宫
*/
#include <iostream>
#include <queue>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std; const int maxn = ;
struct Status {
int r, c;
Status(int r = , int c = ) : r(r), c(c) {}
// int DIR;
};
int N; //迷宫数量
int W; //迷宫宽度
char map[maxn][maxn]; //地图
//方向 : 分别代表 上、右、下、左向量
int dir[][] = { {-, }, {, }, {, }, {, -} };
bool vis[maxn][maxn];
//队列
queue<Status> que; void input(); //输入数据
bool judge(int r, int c);//判断是否越界, 是否是路
bool check(int r, int c);//判断当前是否到达终点
//移动一步
void Move(const Status& now, int r, int c, int k);
void BFS(); //BFS搜索
void solve(); //启动 void input()
{
memset(map, , sizeof(map));
memset(vis, , sizeof(vis));
while (!que.empty()) que.pop();
scanf("%d", &W);
getchar();
for (int i = ; i < W; i++) {
scanf("%s", map[i]);
}
} bool judge(int r, int c)
{
return (r >= && r < W) && (c >= && c < W)
&& map[r][c] != '#';
} bool check(int r, int c)
{
return (r == W- && c == W-) && map[r][c] == 'e';
} void Move(const Status& now, int r, int c, int k)
{
Status tmp = now;
int tmpx = tmp.r;
int tmpy = tmp.c; tmpx += dir[k][];
tmpy += dir[k][]; //判断是否越界, 是否是路, 是否走过
if (!judge(tmpx, tmpy) || vis[tmpx][tmpy]) return; if (check(tmpx, tmpy)) {
printf("YES\n");
exit();
}
vis[tmpx][tmpy] = true;
que.push(Status(tmpx, tmpy));
} void BFS()
{
que.push(Status(, ));
while (!que.empty())
{
Status now = que.front(); que.pop();
int r = now.r, c = now.c;
for (int k = ; k < ; k++) {
Move(now, r, c, k);
}
}
printf("NO\n");
} void solve()
{
scanf("%d", &N);
while (N--) {
input();
BFS();
}
} int main()
{
solve();
return ;
}
BFS简单题套路_Codevs 1215 迷宫的更多相关文章
- bfs简单题-poj2251
宽搜基础题 思路很简单,注意细节. 走过的节点一定要打上标记//tag数组 三维字符串输入一定要注意 #include <stdio.h> #include <iostream> ...
- 胜利大逃亡(杭电hdu1253)bfs简单题
胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- POJ 3984 - 迷宫问题 - [BFS水题]
题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- BZOJ 2683: 简单题
2683: 简单题 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 913 Solved: 379[Submit][Status][Discuss] ...
- 【BZOJ-1176&2683】Mokia&简单题 CDQ分治
1176: [Balkan2007]Mokia Time Limit: 30 Sec Memory Limit: 162 MBSubmit: 1854 Solved: 821[Submit][St ...
- Bzoj4066 简单题
Time Limit: 50 Sec Memory Limit: 20 MBSubmit: 2185 Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...
- Bzoj2683 简单题
Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1071 Solved: 428 Description 你有一个N*N的棋盘,每个格子内有一个整数, ...
随机推荐
- 架构师修练 I - 超级代码控
可实现的是架构,空谈是概念 So don't tell me the concepts show me the code! “不懂编码的架构师不是好架构师” 好架构师都是超级代码控. 代码是最好 ...
- Jmeter目录文件讲解
1.bin:核心可执行文件,包含配置 2.windows启动文件:jmeter.bat mac或linux启动文件:jmeter jmeter-server:mac或linux分布式压测启动文件 jm ...
- 0.1 Maven相关知识(项目开发基础)
一.Maven 1.1Maven是什么 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. Maven这个单词来自于意第绪语(犹太语),意为知识的 ...
- 条件GAN论文简单解读
条件GAN(Conditional Generative Adversarial Nets),原文地址为CGAN. Abstract 生成对抗网络(GAN)是最近提出的训练生成模型(g ...
- DES的加密与解密算法(Python实现)
DES的加密与解密算法(Python实现) 密码学实验:实现了DES的简单的加密和解密算法,DES算法的相关资料网上很多,这里不再赘述,仅仅贴出源代码给大家分享,源码中包含很多汉字注释,相信大家都是可 ...
- Git多人协作工作流程
前言 之前一直把Git当做个人版本控制的工具使用,现在由于工作需要,需要多人协作维护文档,所以去简单了解了下Git多人协作的工作流程,发现还真的很多讲解的,而且大神也已经讲解得很清楚了,这里就做一个简 ...
- 《Linux内核分析》第一周学习报告
第一周:计算机是如何工作的 姓名:王玮怡 学号:20135116 第一节 存储程序计算机工作模型(冯诺依曼体系结构) IP指向的内存地址,取指令执行,完成后,IP值自加一,取下一条指令再执行. AP ...
- 《Linux内核分析》课程第四周学习总结
姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- linux内核分析第四周学习笔记
linux内核分析第四周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- 框架-Spring
项目中都用到了Spring.Mybatis.SpringMVC框架,首先来谈一谈Spring框架,Spring框架以IOC.AOP作为主要思想. IOC----控制反转 IOC的全称为Inversio ...