【programmingrobot】解题报告

题目描述

给定一个迷宫maze,其中maze[i,j]表示第i行第j列的情况。”#”表示墙,”.”表示空地,”R”表示空地,且这里可以在初始时放置一个机器人。迷宫的四个边界都被墙环绕。
假设迷宫中放置了一些机器人。他们会按照相同的指令行走——指令有四种,分别令他们向上下左右其中一个方向行走一步。假设机器人接到了指令,如果指令规定的方向上的相邻格子是空地,那么他会行走一步,否则他会停留在原地。允许同一地点有多个机器人。每秒钟都会执行一条指令。
你的目标是让尽量多的机器人聚在同一格子中。你可以任意选择一些”R”的位置放入机器人,并且给出任意的指令,但你必须使得你放入的机器人最终走到同一格子中。请你求出,最多可以使多少机器人走到一起。

【样例说明】
两个位置不连通,因此如果放两个机器人,无论发出什么指令也不会走到一起。

输入格式

第一行两个整数n,m(1<=n,m<=50),表示迷宫大小。
接下来n行,每行m个字符,表示迷宫。

输出格式

一个整数,表示最多可以有多少机器人聚在一起。


rqnoj十月苦情赛。被吃了100分的题。

统计所有连通块里有多少个R。

用一个floodfill就完了。

有个叫Wjj的屁儿痛的用的floyd。wa90

//#include <iostream>
//using std::cout;
//using std::cin;
#include <cstdio>
const long oo = 0x7fff0000;


long n;long m;
char maze[52][52];
long dx[4] = {-1,0,1,0};
long dy[4] = {0,1,0,-1};
bool used[52][52];


long ans = 0;


void dfs(long p,long q)
{
	if (maze[p][q]=='r'||maze[p][q]=='R')
	{
		ans++;
	}
	for (long i=0;i<4;i++)
	{
		long nx = p+dx[i];
		long ny = q+dy[i];
		if (maze[nx][ny]!='#'&&!used[nx][ny])
		{
			used[nx][ny]=true;
			dfs(nx,ny);
		}
	}
}


int main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	
	scanf("%ld%ld",&n,&m);
	for (long i=1;i<n+1;i++)
	{
		scanf("\n");	
		for (long j=1;j<m+1;j++)
		{
			scanf("%c",&maze[i][j]);
		}
	}
	for (long i=0;i<n+1;i++)
	{
		maze[i][0]=maze[i][m+1]='#';
	}
	for (long i=0;i<m+1;i++)
	{
		maze[0][i]=maze[n+1][i]='#';
	}
	long out = 0;
	for (long i=1;i<n+1;i++)
	{
		for (long j=1;j<m+1;j++)
		{
			if (maze[i][j]!='#'&&!used[i][j])
			{
				used[i][j] = true;
				ans = 0;
				dfs(i,j);
				#ifdef symbol
				for (long i=1;i<n+1;i++)
				{
					for (long j=1;j<m+1;j++)
					{
						printf("%c ",used[i][j]==1?'o':' ');
					}
					printf("\n");
				}
				#endif
				out >?= ans;
			}
		}
	}
	printf("%ld",out);
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值