POJ1979 Red and Black 走黑磚【DFS】
阿新 • • 發佈:2018-04-01
聯通塊 tro problem AC print 要求 pri 聯通 dir
題目鏈接
題目大意:
求圖中最大‘.‘的連通塊,輸出該最大連通塊的塊數
#include <cstdio> int n, m, res; int dir[4][2] = { 1,0,0,1,-1,0,0,-1 }; char map[30][30]; void dfs(int i, int j) { map[i][j] = ‘#‘; res++; for (int k = 0; k < 4; k++) { int x = i + dir[k][0]; int y = j + dir[k][1]; if(x < 0 || y < 0 || x >= n || y >= m)continue; if (map[x][y] == ‘.‘)dfs(x, y); //由於dfs運用遞歸延伸出很多條路徑,res的最終值為所達路徑的最大聯通塊數量 //但是為什麽不用一個max數來保存當前的最大連通快的數值,res++就能做到這樣的效果,即,為什麽res++就能做到最終輸出的res是 } //最大連通塊的數量,是因為最大連通塊的路徑運行的時間最久嗎,所以最後res的值為要求的值} int main() { int i, j, x, y; while (scanf("%d%d", &m, &n) != EOF, n || m) { for (i = 0; i < n; i++)scanf("%s", map[i]); for(i=0;i<n;i++) for (j = 0; j < m; j++) { if (map[i][j] == ‘@‘) { x= i; y = j; } } res = 0; dfs(x, y); printf("%d\n", res); } return 0; }
2018-03-31
POJ1979 Red and Black 走黑磚【DFS】