(1) 找到@之後,把@轉變為*,
(2) 並再找其四面八方的是否存在@,
反覆(1)跟(2)。
一次傳超過4個變數有點討厭,
所以就用全域了……。
/* ACM 572 Oil Deposits * mythnc * 2011/11/29 15:17:44 * version 2 * run time: 0.004 */ #include <stdio.h> #define MAXROW 100 #define MAXCOL 101 #define TRUE 1 #define FALSE 0 int row, col; int sweep(char (*g)[MAXCOL]); void clear(char (*g)[MAXCOL], int i, int j); int main(void) { char grid[MAXROW][MAXCOL]; int i; while (scanf("%d %d", &row, &col) && row != 0) { for (i = 0; i < row; i++) scanf("%s", grid[i]); printf("%d\n", sweep(grid)); } return 0; } /* sweep: sweep and return distinct oil number */ int sweep(char (*g)[MAXCOL]) { int count, i, j; for (count = i = 0; i < row; i++) for (j = 0; j < col; j++) if (g[i][j] == '@') { count++; clear(g, i, j); } return count; } /* clear: clear '@' to '*' */ void clear(char (*g)[MAXCOL], int i, int j) { int mover[] = {1, 1, 1, 0, -1, -1, -1, 0}; int movec[] = {-1, 0, 1, 1, 1, 0, -1, -1}; int k, x, y; g[i][j] = '*'; for (k = 0; k < 8; k++) { x = i + mover[k]; y = j + movec[k]; if (x >= 0 && x < row && y >= 0 && y < col && g[x][y] == '@') clear(g, x, y); } }
沒有留言:
張貼留言