欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

A - Red and Black ZOJ - 2165

程序员文章站 2022-04-01 09:44:47
...

题意
有一个长方形的房间,覆盖着正方形的瓷砖。每个磁贴都被着色为红色或黑色。一个人站在黑色的瓷砖上。他可以从一个图块移动到四个相邻图块之一。但是他不能在红色瓷砖上移动,只能在黑色瓷砖上移动。

编写一个程序,通过重复上述动作来计算他可以到达的黑色瓷砖的数量。
解析 普通的dfs,暴力输出就可
#include
#include
using namespace std;
#define MAX_W 20
#define MAX_H 20
int i, j, sum;
char ch[MAX_W][MAX_H];
void dfs(int x, int y)
{

ch[x][y] = '#';//注意可以不用标记,直接将走过的变为红砖就可
int k, h;
for (k = -1; k <= 1; k++)
for (h = -1; h <= 1; h++)
{
	int xx = x + h;
	int yy = y + k;
	if (xx >0 && yy >0 && xx <= i && yy <= j &&  ch[xx][yy] == '.')//越界与黑砖
	{	sum++;

		dfs(xx, yy);
	}
}
return;

}
int main()
{
while (1)
{
sum = 0;
cin >> j >> i;

	if (i == 0 && j == 0)
		break;
	else{
		for (int k = 1; k <= i; k++)
		for (int h = 1; h <= j; h++)
		{
			cin >> ch[k][h];
		}
		for (int k = 1; k <= i; k++)
		for (int h = 1; h <= j; h++)
		{

			if (ch[k][h] == '@')
			{
				dfs(h, k);

			}
		}
		cout << sum << endl;
	}
}

return 0;

}