红与黑

这篇具有很好参考价值的文章主要介绍了红与黑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有一个矩形房间,覆盖正方形瓷砖。每块瓷砖涂成了红色或黑色。一名男子站在黑色的瓷砖上,由此出发,可以移到四个相邻瓷砖之一,但他不能移动到红砖上,只能移动到黑砖上。编写一个程序,计算他通过重复上述移动所能经过的黑砖数(一开始站立的黑砖也要算)。

输入

开头行包含两个正整数W和H,W和H分别表示矩形房间的列数和行数,且都不超过20.
每个数据集有H行,其中每行包含W个字符。每个字符的含义如下所示:

'.'——黑砖
'#'——红砖
'@'——男子(仅出现一次)

输出

程序应该输出一行,包含男子从初始瓷砖出发可到达的瓷砖数

样例输入文章来源地址https://www.toymoban.com/news/detail-422936.html

6 9
....#.
.....#
......
......
......
......
......
#@...#
.#..#.

样例输出

45



#include <bits/stdc++.h>
using namespace std;
char mapp[21][21];
int r,c,vis[21][21],cnt;
int a[4]={1,0,-1,0};
int b[4]={0,1,0,-1}; 
struct xyint
{
	int x,y;
}s;
queue<xyint> q;

void bfs()
{
	xyint now,nextt;
	q.push(s);
	while(q.size())
	{
		now=q.front();
		q.pop();
		if(!(now.x>=0&&now.x<r&&now.y>=0&&now.y<c)) break;
		for(int i=0;i<4;i++)
		{
			nextt.x = now.x+a[i], nextt.y = now.y+b[i];
			if(!vis[nextt.x][nextt.y] && mapp[nextt.x][nextt.y]=='.' && nextt.x>=0 && nextt.x<r && nextt.y>=0 && nextt.y<c)
			{
				cnt++;
				vis[nextt.x][nextt.y]=1;
				q.push(nextt);
			}
		} 
	}
}

int main()
{

	cin >> c >> r;
	cnt=1;
	for(int i=0;i<r;i++)
	{
		for(int j=0;j<c;j++)
		{
			cin >> mapp[i][j];
			if(mapp[i][j]=='@')
			{
				s.x=i;
				s.y=j;
			}
		}
	}
	bfs();
	cout<<cnt;
	return 0;
}

到了这里,关于红与黑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包