样例都对了,测试点全挂
  • 板块灌水区
  • 楼主ONT_
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/1/21 15:02
  • 上次更新2023/10/28 11:40:09
查看原帖
样例都对了,测试点全挂
380235
ONT_楼主2022/1/21 15:02

红黑瓷砖 描述

有一间长方形的房了,地上铺了红色和黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。编写一个程序,计算一共能够到达多少块黑色的瓷传

输入 第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。W和H都不超过10,在接下来的H行中,每行包括W个字符,每个字符表示-块瓷砖的颜色,其规则如下

(1).表示黑色的瓷砖;

(2)# 表示白色的瓷砖;

(3)@ 表示黑色的瓷砖,并且你站在这块瓷砖上,该字符在每个数据集合中唯一出现一次

输出 输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷传)。


#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,o=0,l=0,ddx,ddy,h=0;
char a,p[105][105];
int vis[105][105],g[1005],z=0;
int dx[5]={-1,1,0,0};//上下左右
int dy[5]={0,0,-1,1}; 
void dfs(int x,int y)
{
	h=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(vis[i][j]==0)
			{
				h++;
			}
		}
	}
	z++;
	g[z]=h;
	if(g[z]==g[z-1])
	{
		return;
	}
	for(int i=0;i<4;i++)
	{
		ddx=x+dx[i];
		ddy=y+dy[i];
		if(p[ddx][ddy]=='.'&&vis[ddx][ddy]==0)
		{
			vis[ddx][ddy]=1;
			o++;
			dfs(ddx,ddy);
		}
	}
}
int main()
{
	memset(vis,0,sizeof(vis));
	cin>>n>>m; 
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a;
			p[i][j]=a;
			if(a=='@')
			{
				sx=i; sy=j;
				vis[sx][sy]=2;
			}
			if(a=='#')
			{
				vis[i][j]=3;
			}
		}
	}
	dfs(sx,sy);
	cout<<o-1;
	return 0;
}
2022/1/21 15:02
加载中...