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的棋盘,每个格子内有一个整数, ...
随机推荐
- Visual Studio控制台程序输出窗口一闪而过的解决方法
转载大牛的博客,自己也遇到了类似的问题,解决方法很详细,也很管用 刚接触 Visual Studio的时候大多数人会写个Hello World的程序试一下,有的人会发现执行结束后输出窗口会一闪而过 ...
- ELK安装部署
一.ELK简介 ELK是Elasticsearch.Logstash.Kibana的简称,这三者是核心套件,但并非全部.Elasticsearch是实时全文搜索和分析引擎,提供搜集.分析.存储数据三大 ...
- 云服务器+tomcat+mysql+web项目搭建部署
云服务器+tomcat+mysql+web项目搭建部署 1.老样子,开头墨迹两句. 作为我的第二篇文章,有很多感慨,第一篇人气好低啊,有点小丧气,不过相信我还是经验少,分享的都是浅显的,所以大家可能不 ...
- Redis源码阅读(二)高可用设计——复制
Redis源码阅读(二)高可用设计-复制 复制的概念:Redis的复制简单理解就是一个Redis服务器从另一台Redis服务器复制所有的Redis数据库数据,能保持两台Redis服务器的数据库数据一致 ...
- python 游戏(船只寻宝)
1. 游戏思路和流程图 实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数) 游戏流程图 2. 使用模块和游戏提示 import r ...
- UVALive 4877 Non-Decreasing Digits 数位DP
4877 Non-Decreasing Digits A number is said to be made up ofnon-decreasing digitsif all the digits t ...
- LeetCode-----算法448.找到所有数组中消失的数字
题目: 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. ...
- TUANDUIZUOYE
[组队后的项目整体计划安排] - 学习:先学习基础知识,懂得该做什么,后边做边学,在实践中成长: - 项目:根据迭代原则,先完成较简单的功能,而后进攻较难功能,保证项目的最终完成度. 阶段序列 ...
- Beta版本冲刺(三)
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...
- word漏洞分析与利用
众所周知,溢出漏洞从应用形式上可分为远程服务溢出漏洞和客户端(本地)溢出漏洞两类.远程服务溢出漏洞大家很熟悉了,红色代码.冲击波.振荡波等蠕虫都利用了此类漏洞,漏洞的调试和利用有相应的一套方法,前面的 ...