HDU 1312 Red and Black --- 入门搜索 BFS解法
题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象为墙,然后.为可以走的空地,求人可以走的最大点数。
解题思路:从起点开始,起点的四个方向满足条件的点分别入队(放置重复入队,需只要一入队就标记已访问而不是取出时再进行标记),直至队为空。
/*HDU 1312 ----- Red and Black 入门搜索 BFS解法*/
#include <cstdio>
#include <queue>
using namespace std; int n, m; //n行m列
int cnt;
char mapp[][];
int dirx[] = { -, , , };
int diry[] = { , , -, }; //用于循环来访问4个方向
struct Node{
int x, y;
};
queue<Node> q; void bfs(){
/*队不为空时 表明还可以近一步搜索*/
/*在队中的点都是已访问过、但需近一步访问周围四个方向的点的点*/
while (!q.empty()){
Node tmp = q.front();
q.pop();
Node tmp2;
/*近一步判断该点的四个方向四否可以访问*/
for (int i = ; i < ; ++i){
//tmp2即为4个方向的点
tmp2.x = tmp.x + dirx[i];
tmp2.y = tmp.y + diry[i];
if (tmp2.x >= && tmp2.x < n && tmp2.y >= && tmp2.y < m
&& mapp[tmp2.x][tmp2.y] != '#'){
//该点可访问
++cnt;
mapp[tmp2.x][tmp2.y] = '#'; //访问过后标记为不可访问
q.push(tmp2); //入队以下次循环近一步搜索
}
}//for(i)
}//while(empty)
} int main()
{
int startx, starty;
//m行m列 注意题目先给出列数
while (scanf("%d%d", &m, &n) == && (m + n)){
for (int i = ; i < n; ++i){
scanf("%s", mapp[i]);
for (int j = ; j < m; ++j){
if ('@' == mapp[i][j]){
startx = i;
starty = j;
cnt = ; //初始化找到一块
mapp[i][j] = '#'; //访问过后为已访问过
}
}
}//for(i)
Node start;
start.x = startx; start.y = starty;
q.push(start);
bfs();
printf("%d\n", cnt);
} return ;
}
HDU 1312 Red and Black --- 入门搜索 BFS解法的更多相关文章
- HDU 1312 Red and Black --- 入门搜索 DFS解法
HDU 1312 题目大意: 一个地图里面有三种元素,分别为"@",".","#",其中@为人的起始位置,"#"可以想象 ...
- HDU 1312:Red and Black(DFS搜索)
HDU 1312:Red and Black Time Limit:1000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- HDU 1312 Red and Black(最简单也是最经典的搜索)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...
- HDU 1312 Red and Black(bfs,dfs均可,个人倾向bfs)
题目代号:HDU 1312 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/100 ...
- HDU 1312 Red and Black (dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 Red and Black Time Limit: 2000/1000 MS (Java/Oth ...
- hdu 1312:Red and Black(DFS搜索,入门题)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- HDU 1312 Red and Black DFS(深度优先搜索) 和 BFS(广度优先搜索)
Red and Black Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
- HDU 1312 Red and Black (DFS & BFS)
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 题目大意:有一间矩形房屋,地上铺了红.黑两种颜色的方形瓷砖.你站在其中一块黑色的瓷砖上,只能向相 ...
- HDU 1312 Red and Black(bfs)
Red and Black Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descr ...
随机推荐
- Cocoapods的安装与使用
一.安装 1.CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境.OS X系统默认已经可以运行Ruby了,因此我们只需执行以下命令: sudo gem install cocoa ...
- java.io.IOException: open failed: EACCES (Permission denied)问题解决
1. 问题描述:在Android中,用程序访问Sdcard时,有时出现“java.io.IOException: open failed: EACCES (Permission denied)&qu ...
- Yslow&PageSpeed– 诊断各种缓慢症状
Google的PageSpeed和yahoo的yslow是各位不可少的前端工具(同样也都是firebug的插件,安装了firebug之后才可以拥有她们),当各位无法用三寸不烂之舌收拾产品和各种大佬的时 ...
- python 接口开发(一)
cmd中,提示pip版本太低,先升级pip pip install --upgrade pip (pip,安装和管理python扩展包的工具) cmd下,pip,出现详细信息证明装成功了 pip ...
- Android中判断当前网络是否可用
转载原文地址:http://www.cnblogs.com/renqingping/archive/2012/10/18/Net.html 当前有可用网络,如下图: 当前没有可用网络,如下图: 实现步 ...
- Notification通知栏
Notification通知栏 首先实现的功能就是通知栏显示Notification,Notification是显示在系统的通知栏上面的,所以Notification 是属于进程之前的通讯.进程之间的 ...
- Ajax的post方法,模拟 从后台读取数据小demo
$(document).ready(function() { //定义一个函数 function timer() { $.post("1.json", function(data, ...
- Unix/Linux获取进程的详细信息
Linux的进程的信息都记录在/proc/<pid>/下面,其实常用的ps.top命令也是从这里读取信息的.常用的信息有: cmd(命令).cmdline(完整的命令行参数).envrio ...
- (转)SQLite数据库增删改查操作
原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...
- php大力力 [001节]2015-08-21.php在百度文库的几个基础教程新手上路日记 大力力php 大力同学 2015-08-21 15:28
php大力力 [001节]2015-08-21.php在百度文库的几个基础教程新手上路日记 大力力php 大力同学 2015-08-21 15:28 话说,嗯嗯,就是我自己说,做事认真要用表格,学习技 ...