ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

hdu 1312 Red and Black(BFS)

2021-06-10 19:55:50  阅读:178  来源: 互联网

标签:nx hdu ny int ++ BFS vis Black &&


文章目录

题目描述

有一个长方形的房间,铺着方形瓷砖。每块瓷砖都涂上红色或黑色。一个男人站在黑色的瓷砖上。从瓦片,他可以移动到四个相邻的瓷砖之一。但他不能在红瓦上移动,他只能在黑瓦上移动。

编写一个程序,通过重复上述步骤来计算他可以达到的黑色瓷砖的数量。

输入

输入由多个数据集组成。数据集以包含两个正整数W和H的行开始; W和H分别是x方向和y方向上的瓦片数量。W和H不超过20.
数据集中有更多的行,每个行包含W个字符。每个字符表示一个瓦片的颜色如下。
’ . ’ - 黑色瓦片
‘#’ - 红色瓦片
‘@’ - 黑色瓦片上的男士(在数据集中恰好出现一次)
输入的末尾由包含两个零的行表示。

输出

对于每个数据集,程序应该输出一行,其中包含他可以从初始图块(包括自身)到达的图块数量。

样例输入

6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 
11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 
11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 
7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0

样例输出

45
59
6
13
代码
#include<iostream>  
#include<cstring>  
#include<cstdio>  
using namespace std;
// n行m列   vis迷宫图   ans黑瓦个数(每执行一次dfs函数就找到一个,并且第一片肯定是黑瓦)
int n, m, vis[30][30], ans;
int fx[4] = { 0,0,1,-1 }, fy[4] = { 1,-1,0,0 };//用来记录移动的xy方位  
char tile[30][30];//记录迷宫  
void dfs(int x, int y) 
{
	ans++;					//计算步数  
	vis[x][y] = 1;			//将此位置记录 已走过 
	for (int i = 0; i < 4; i++)
	{  
		//向四个方位分别搜索 
		int nx = x + fx[i];
		int ny = y + fy[i];
		if (nx >= 0 && nx < n&&ny >= 0 && ny < m
			&& !vis[nx][ny] && tile[nx][ny] == '.')//判断是否越界是否走过是否可走  
			dfs(nx, ny);
	}
}

int main() 
{

	while (cin >> m >> n, m != 0, n != 0) 
	{
		ans = 0;
		memset(vis, 0, sizeof(vis));

		for (int i = 0; i < n; i++)
			cin >> tile[i];

		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				// 找人的位置
				if (tile[i][j] == '@' && !vis[i][j])
				{
					dfs(i, j);
					break;
				}
			}
		}
		cout << ans << endl;
	}

	return 0;
}

标签:nx,hdu,ny,int,++,BFS,vis,Black,&&
来源: https://blog.51cto.com/u_15265965/2892309

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有