1. 程式人生 > >POJ1979 Red and Black 走黑磚【DFS】

POJ1979 Red and Black 走黑磚【DFS】

聯通塊 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】