Poj(2312),坦克大战,BFS的变形
题目链接:http://poj.org/problem?id=2312
挺有趣的一道题目,然而很容易WA,我就WA了一次,虽然我Debug的时候已经知道哪里出问题了,就是比如说我搜到B和E时,从B搜第三个点,B左边的E就被搜了,step为3,然而其实他是step为2,
这里的处理方法很是巧妙,可以从B出发时,把B换成E,step+1,形成一个新的结点加入到队列中去.
之后,和杰哥交流了这下题,我对这个BFS又有了新的一点认识,BFS时,每次搜索的点,都要是同一级别的点,想这里B,和E就不是同一级别的点,所以将这个B,分成两部,注意B搜完后不要标记,B还没有访问完。
- #include <stdio.h>
- #include <string.h>
- #include <queue>
- using namespace std;
- int to[][]= {{-,},{,},{,-},{,}};
- struct Point
- {
- int r,c;
- int step;
- };
- int r,c;
- char maps[][];
- bool vis[][];
- bool judge (int rx,int cx)
- {
- if(rx<||rx>=r||cx<||cx>=c||maps[rx][cx]=='S'||maps[rx][cx]=='R'||vis[rx][cx])
- return true;
- else return false;
- }
- int main()
- {
- int sr,sc;
- while(scanf("%d%d",&r,&c),r)
- {
- memset(vis,false,sizeof(vis));
- for(int i=; i<r; i++)
- {
- scanf("%s",maps[i]);
- for(int j=; j<c; j++)
- {
- if(maps[i][j]=='Y')
- {
- sr = i;
- sc = j;
- }
- }
- }
- int ans = -;
- queue<Point> Q;
- Point a,next;
- a.r = sr;
- a.c = sc;
- a.step = ;
- vis[a.r][a.c] = true;
- Q.push(a);
- while(!Q.empty())
- {
- a = Q.front();
- Q.pop();
- if(maps[a.r][a.c]=='T')
- {
- ans = a.step;
- break;
- }
- if(maps[a.r][a.c]=='B')
- {
- a.step ++;
- maps[a.r][a.c] = 'E';
- Q.push(a);
- continue;
- }
- for(int i=; i<; i++)
- {
- next.r = a.r + to[i][];
- next.c = a.c + to[i][];
- if(judge(next.r,next.c))
- continue;
- vis[next.r][next.c] = true;
- next.step = a.step +;
- Q.push(next);
- }
- }
- printf("%d\n",ans);
- }
- return ;
- }
Poj(2312),坦克大战,BFS的变形的更多相关文章
- NYOJ 284 坦克大战 bfs + 优先队列
这类带权的边的图,直接广搜不行,要加上优先队列,这样得到的结果才是最优的,这样每次先找权值最小的,代码如下 #include <stdio.h> #include <iostream ...
- POJ - 2312 Battle City BFS+优先队列
Battle City Many of us had played the game "Battle city" in our childhood, and some people ...
- poj 2312 Battle City【bfs+优先队列】
Battle City Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7579 Accepted: 2544 Des ...
- NYOJ 284 坦克大战 【BFS】+【优先队列】
坦克大战 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 Many of us had played the game "Battle city" ...
- nyoj-----284坦克大战(带权值的图搜索)
坦克大战 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" ...
- nyoj 284 坦克大战 简单搜索
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...
- 3D坦克大战游戏源码
3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...
- 【blade04】用面向对象的方法写javascript坦克大战
前言 javascript与程序的语言比如C#或者java不一样,他并没有“类”的概念,虽然最新的ECMAScript提出了Class的概念,我们却没有怎么用 就单以C#与Java来说,要到真正理解面 ...
- 3D坦克大战游戏iOS源码
3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...
随机推荐
- vue(1)安装
1.安装node.js(https://nodejs.org/en/),我安装的是 v10.15.1 1).在nodejs安装路径下,新建node_global和node_cache两个文件夹 2). ...
- python—datetime time 模板学习
写在前面:本人在学习此内容是通过 https://www.cnblogs.com/pycode/p/date.html 文章学习! 时间模块——time python 中时间表示方法有:时间戳_:格式 ...
- MapReduce的主要的六个类讲解
a.InputFormat类.该类的作用是将输入的文件和数据分割成许多小的split文件, 并将split的每个行通过LineRecorderReader解析成<Key,Value>,通过 ...
- robot framework 的AutoItLibrary常用关键字
1.run 的用法,以及激活当前窗口
- android studio NDK配置
向您的项目添加 C 和 C++ 代码 本文内容 下载 NDK 和构建工具 创建支持 C/C++ 的新项目 构建和运行示例应用 向现有项目添加 C/C++ 代码 创建新的原生源文件 创建 CMake 构 ...
- spring webapp的配置文件放置在项目外的方法
在web.xml中,填写 <context-param> <param-name>CFG_HOME</param-name> ...
- iterable- 什么是可迭代对象
什么是可迭代对象? 可以被For循环执行的 字符串.列表这2个是可迭代对象
- Unity Resources.Load
GameObject bulletPrefab; void Start() { bulletPrefab = Resources.Load("bulletPrefab") a ...
- git使用笔记-比较分支差异
比如我们有 2 个分支:master, dev,现在想查看这两个 branch 的区别,有以下几种方式: 1.查看 dev 有,而 master 中没有的: git log dev ^master 同 ...
- ORACLE SQL 实现IRR的计算
一.IRR计算的原理: 内部收益率(Internal Rate of Return (IRR)),就是资金流入现值总额与资金流出现值总额相等.净现值等于零时的折现率. 用公式 标识:-200+[30/ ...