第二次周赛HDU-1241题解

问题链接:HDU-1241

问题简述

有多组数据,每组数据第一行输入两个正整数m,n,下面m行,每行n个字符,字符由‘@’与‘*’组成一个矩形,令‘@’且与此符号相邻(上下左右对角)的‘@’都算为一组,计算共有多少组并输出。

思路

深度优先搜索。

AC通过的C++语言程序如下:

#include<iostream>
#include<cstring>
using namespace std;
char a[101][101];
int a1[100][100];
int s[8][2] = { {0,1},{0,-1},{-1,0},{1,0},{1,1},{1,-1},{-1,1},{-1,-1} };
int m, n;
void DFS(int, int);
int main()
{
	while (cin>>m>>n)
	{
		if (m == 0) break;
		for (int i = 0; i < m; i++)
			cin >> a[i];
		memset(a1, 0, sizeof(a1));
		int sum = 0;
		for(int i=0;i<m;i++)
			for (int j = 0; j < n; j++)
			{
				if (a[i][j] == '@'&&a1[i][j] == 0)
				{
					a1[i][j] = 1;
					sum++;
					DFS(i, j);
				}
			}
		cout << sum << endl;
	}
	return 0;
}
void DFS(int x, int y)
{
	int x1, y1;
	for (int i = 0; i < 8; i++)
	{
		x1 = s[i][0] + x;
		y1 = s[i][1] + y;
		if (x1<0 || x1>m - 1 || y1<0 || y1>n - 1)
			continue;
		if (a[x1][y1] == '@'&&a1[x1][y1] == 0)
		{
			a1[x1][y1] = 1;
			DFS(x1, y1);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43970556/article/details/85137608