题目来自:http://poj.org/problem?id=1164
1 2 3 4 5 6 7
#############################
1 # | # | # | | #
#####---#####---#---#####---#
2 # # | # # # # #
#---#####---#####---#####---#
3 # | | # # # # #
#---#########---#####---#---#
4 # # | | | | # #
#############################
(Figure 1)
# = Wall
| = No wall
- = No wall
4 7 11 6 11 6 3 10 6 7 9 6 13 5 15 5 1 10 12 7 13 7 5 13 11 10 8 10 12 13
5 9
#include <iostream> #include <cstring> using namespace std; int n,m,a[51][51],ans = 0,maxn = -1,cnt = 0,id[51][51]; bool vis[51][51]; void dfs(int x,int y){ if (vis[x][y]) return ; if (x > n || x < 1 || y > m || y < 1) return ; vis[x][y] = true; ans++; id[x][y] = cnt; if (a[x][y] == 14){dfs(x,y - 1);} if (a[x][y] == 13){dfs(x - 1,y);} if (a[x][y] == 12){dfs(x,y - 1);dfs(x - 1,y);} if (a[x][y] == 11){dfs(x,y + 1);} if (a[x][y] == 10){dfs(x,y - 1);dfs(x,y + 1);} if (a[x][y] == 9){dfs(x - 1,y);dfs(x,y + 1);} if (a[x][y] == 8){dfs(x,y - 1);dfs(x - 1,y);dfs(x,y + 1);} if (a[x][y] == 7){dfs(x + 1,y);} if (a[x][y] == 6){dfs(x,y - 1);dfs(x + 1,y);} if (a[x][y] == 5){dfs(x - 1,y);dfs(x + 1,y);} if (a[x][y] == 4){dfs(x - 1,y);dfs(x,y - 1);dfs(x + 1,y);} if (a[x][y] == 3){dfs(x,y + 1);dfs(x + 1,y);} if (a[x][y] == 2){dfs(x,y - 1);dfs(x,y + 1);dfs(x + 1,y);} if (a[x][y] == 1){dfs(x - 1,y);dfs(x,y + 1);dfs(x + 1,y);} if (a[x][y] == 0){dfs(x - 1,y);dfs(x,y + 1);dfs(x + 1,y);dfs(x,y - 1);} } int main(){ memset(vis,false,sizeof(vis)); cin >> n >> m; for (int i = 1;i <= n;i++){ for (int j = 1;j <= m;j++){ cin >> a[i][j]; } } for (int i = 1;i <= n;i++){ for (int j = 1;j <= m;j++){ if (!vis[i][j]){ cnt++; ans = 0; dfs(i,j); maxn = max(ans,maxn); } } } cout << cnt << endl << maxn; return 0; }
原文:https://www.cnblogs.com/linyiweiblog/p/14671693.html