标签:
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 13771 | Accepted: 7502 |
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
0
1
2
2
题解:和《海战》那题一样,DFS
CODE:
#include <iostream> #include <cstdio> #include <cstring> #define REP(i, s, n) for(int i = s; i <= n; i ++) #define REP_(i, s, n) for(int i = n; i >= s; i --) #define MAX_N 100 + 10 using namespace std; int n, m, ans = 0; bool map[MAX_N][MAX_N]; int dx[9] = {0, -1, -1, -1, 0, 0, 1, 1, 1}, dy[9] = {0, -1, 0, 1, -1, 1, -1, 0, 1}; void dfs(int x, int y){ map[x][y] = 0; REP(i, 1, 8){ int nx = x + dx[i], ny = y + dy[i]; if(map[nx][ny] && nx >= 1 && nx <= n && ny >= 1 && ny <= m) dfs(nx, ny); } } int main(){ freopen("1.in", "r", stdin); char c; while(scanf("%d%d", &n, &m) != EOF){ if(n == 0 && m == 0) break; getchar(); REP(i, 1, n){ REP(j, 1, m){ cin >> c; map[i][j] = (c == ‘@‘ ? 1 : 0); }getchar(); } ans = 0; REP(i, 1, n) REP(j, 1, m){ if(map[i][j]) ans ++, dfs(i, j); } printf("%d\n", ans); } return 0; }
标签:
原文地址:http://www.cnblogs.com/ALXPCUN/p/4532625.html