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 ...
随机推荐
- C# 轉義字符
转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将 ...
- CSU1022
题目: blue和AutoGerk是好朋友.他们的相同点是都喜欢研究算法,不同点是AutoGerk已是大牛而blue还是菜鸟.blue经常拿一些自以为很难的问题去问AutoGerk,想难倒他,但是每次 ...
- [C/C++]数据类型与变量
1.类型: 1.1.简介 1.1.1.基本类型(base type)和复合类型(compound type): 复合类型是指基于其它类型定义的类型.([1].2.3 p45)那么基本类型就是复合类型基 ...
- ZooKeeper启动过程2:FastLeaderElection
前一篇文章中说到,启动ZooKeeper集群时,需要分别启动集群中的各个节点,各节点以QuorumPeer的形式启动,最后到达startLeaderElection和lookForLeader. 先说 ...
- HTML--10Jquery
在<网页制作Dreamweaver(悬浮动态分层导航)>中,运用到了jQuery的技术,轻松实现了菜单的下拉.显示.隐藏的效果,不必再用样式表一点点地修改,省去了很多麻烦,那么jQuery ...
- C++ offsetof
这是一个宏,用于计算类中某个成员的地址相对于类实例的偏移量 在C++11中,要求这个类standard_layout 基本用法是这样子的: #include <stdio.h> /* pr ...
- Wythoff's game
这个问题就是OJ题里出现的取石子游戏,http://en.wikipedia.org/wiki/Wythoff%27s_game. 维基里面的通项公式并不适用于算法求解.需要理解下面两条规律: 1.A ...
- JAVA判断当前时间是上午am还是下午pm
//结果为"0"是上午 结果为"1"是下午 public class GregorianTest { public static void main(Strin ...
- HDU1556-color the ball(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 #include<cstdio> using namespace std; stru ...
- HDU 5100
http://acm.hdu.edu.cn/showproblem.php?pid=5100 用1*k方格覆盖n*n方格 有趣的一道题,查了下发现m67的博客还说过这个问题 其实就是两种摆法取个最大值 ...