红与黑

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

输入

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

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

输出

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

样例输入

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;
}

原文链接:https://www.cnblogs.com/momotrace/p/red-and-black.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:红与黑 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年4月25日

相关文章

  • 详解C++中的ANSI与Unicode和UTF8三种字符编码基本原理与相互转换

    下面是详解C++中的ANSI与Unicode和UTF8三种字符编码基本原理与相互转换的攻略。 一、字符编码的概念 字符编码是将字符集中的每个字符映射到某个二进制值的一种方法。常见的字符编码方式包括ASCII、ANSI、Unicode和UTF-8等。 ANSI编码指的是使用单字节表示每个字符的编码方式,它的编码范围是0-127,这种编码方式主要在早期的计算机和…

    C 2023年5月23日
    00
  • PHP5与MySQL数据库操作常用代码 收集

    接下来我将为你详细讲解“PHP5与MySQL数据库操作常用代码 收集”的完整攻略,内容分为以下几部分: 概述 配置 数据库连接 数据库查询 数据库插入 指定数据库、表格、字段等 示例说明 注意事项 1. 概述 本攻略旨在介绍如何在PHP5中对MySQL数据库进行操作,并提供一些常用代码的收集,方便开发人员快速上手进行开发。MySQL是一款广泛应用于Web应用…

    C 2023年5月23日
    00
  • C/C++ QT实现解析JSON文件的示例代码

    接下来我将为你详细讲解“C/C++ QT实现解析JSON文件的示例代码”的完整攻略。 1. 概述 首先需要明确什么是JSON文件,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。与XML不同,它更加简洁明了,并且易于阅读和编写。JSON格式通常用于异步浏览器和服务器之间的数据传输,也可以作为常规的数据存储格式。 这…

    C 2023年5月23日
    00
  • 如何实现循环队列

    如何实现循环队列? 循环队列是一种环形数据结构,它与普通队列的不同之处在于,当队列满时,新元素会插入到队列头部,而不是队列尾部。循环队列的实现可以使用数组或链表来完成。 以下是使用数组实现循环队列的攻略: 为了实现循环队列,我们需要先声明一个数组来存储队列元素,还需要确定两个指针front和rear,分别指向队列的头部和尾部。 初始化队列时,将front和r…

    C 2023年5月23日
    00
  • Java IO流之字符流的使用详解

    Java IO流之字符流的使用详解 什么是字符流 字符流是一种能够处理字符数据的流,在字符流中,数据以字符的形式进行读写。 字符流的分类 字符流可以分为两类:输入字符流和输出字符流。其中,输入字符流用于读取字符数据,输出字符流用于写入字符数据。 输入字符流 输出字符流 Reader 抽象类 Writer 抽象类 FileReader 文件字符输入流 File…

    C 2023年5月23日
    00
  • vscode C++开发环境配置步骤详解(教你如何用vscode编写写C++)

    vscode C++开发环境配置步骤详解 在使用vscode编写C++代码前,需要配置开发环境。本文将详细介绍如何配置vscode C++开发环境。 步骤一:安装vscode 如果还未安装vscode,请在官网下载安装。 步骤二:安装C++插件 在vscode中,点击“扩展”按钮(或使用快捷键Ctrl + Shift + X),在搜索框中输入“C++”,找到…

    C 2023年5月23日
    00
  • php求数组全排列,元素所有组合的方法

    为了实现“php求数组全排列,元素所有组合的方法”,可以使用递归的方式来求解。下面将以一些示例,详细讲解如何实现这个功能。 求数组所有组合的方法 假设要求一个数组中有哪些元素的组合,可以使用递归的方式来求解,具体步骤如下: 定义一个递归函数,传入两个参数: $arr:需要求解的数组 $prefix:当前已经组合好的前缀数组(默认为空数组) 在递归函数中,判断…

    C 2023年5月22日
    00
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#操作本地文件及保存文件到数据库的基本方法总结 操作本地文件是开发中经常需要处理的事情,而保存文件到数据库则会更加复杂,因此本文总结了C#操作本地文件及保存文件到数据库的基本方法。 操作本地文件 在C#中,我们可以使用System.IO命名空间下的类来操作本地文件。下面是一些常见的操作示例: 创建一个新文件 string filePath = @&quot…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部