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 迷宫的更多相关文章

  1. bfs简单题-poj2251

    宽搜基础题 思路很简单,注意细节. 走过的节点一定要打上标记//tag数组 三维字符串输入一定要注意 #include <stdio.h> #include <iostream> ...

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

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

  3. POJ 3984 - 迷宫问题 - [BFS水题]

    题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...

  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. 简单模拟flume

    NetCat方式: 远程访问的方式进行消息传递 配置一个Agent,主要配置三个组件: source, channel, sink 上图中为什么channel会带s,变成channels? 可以绑定多 ...

  2. 修炼内功_day01

    测试六段:    测试第一段:        - 能根据测试用例的描述步骤来执行用例        - 能对照用例的预期结果发现产品的问题        - 能够清晰准确的将问题记录下来后反馈给开发, ...

  3. Estimation And Gain

    Estimation: Almost every is spent on ergod the text and build the dictionary. Gains: I have never us ...

  4. Notes of Daily Scrum Meeting(12.19)

    今天工作进展的速度别昨天稍有提高,希望大家再接再厉!加油! 团队任务总结如下: 团队成员 今日团队工作 陈少杰 重新尝试使用get等方法进行网络连接的调试 王迪 调试搜索功能中测出的问题 金鑫 测试已 ...

  5. Linux第五章笔记

    5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层. 主要作用有: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都需要运行在虚拟机内 5.2 AP ...

  6. 《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS

    郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周 构造一个简单的Linux系统Me ...

  7. oracle not in minus 取到的结果集不同

    not in:A not in B B中的集合不能包含空值

  8. js分页实例

    js分页实例 案例1 1.js_pageusers.html <!DOCTYPE html> <html> <head> <title>js_pageu ...

  9. 代理 ip

    利用 VPN 技术通过一台服务器将自己的电脑冒名借用这个服务器的ip ,这台服务器的 ip 即为代理 ip,被冒名ip的服务器即为 代理服务器.我猜的. 实验 这次使用的是 芝麻软件 代理ip软件,其 ...

  10. 第一次冲刺阶段后五天总结和第一次 Sprint

    第一次冲刺阶段后五天总结(11.16-11.20) 一.准备实现的功能 1 在游戏中随机显示式子 点击进入答题则进入答题界面,显示式子 2 设置限时或者规定答题数目模式 进入游戏,选择不同模式 3 产 ...