UVa 11094 - Continents

来源:互联网 发布:mac如何全屏截图 编辑:程序博客网 时间:2024/06/10 05:57

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

分析:图论,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;}


0 0