您的位置:首页 > 其它

UVa 11094 - Continents

2015-06-10 00:37 99 查看
题目:有一些岛屿在湖中,地图用两种字符表示,当前处在位置是一个岛屿,求除了当前岛屿外的最大岛屿。

分析:图论,floodfill。直接利用dfs求联通部分的面积即可,然后取出最大。

说明:横线没有边界,初始的岛屿不算在内。╮(╯▽╰)╭。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>

using namespace std;

char maps[22][22];

int dxy[4][2] = {0,1,1,0,-1,0,0,-1};
int dfs(int x, int y, int m, int n, char c)
{
	if (x < 0 || x >= m) return 0;
	if (maps[x][y] != c) return 0;
	maps[x][y] = 0;
	int sum = 1;
	for (int i = 0; i < 4; ++ i)
		sum += dfs(x+dxy[i][0], (y+n+dxy[i][1])%n, m, n, c);
	return sum;
}

int main()
{
	int m,n,x,y;
	while (cin >> m >> n) {
		for (int i = 0; i < m; ++ i)
			cin >> maps[i];
		cin >> x >> y;
		char ch = maps[x][y];
		int  Max = 0;
		dfs(x, y, m, n, ch);
		for (int i = 0; i < m; ++ i)
		for (int j = 0; j < n; ++ j)
			if (maps[i][j] == ch)
				Max = max(Max, dfs(i, j, m, n, ch));
		cout << Max << endl;
	}
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: