1. 程式人生 > >POJ1979 Red and Black

POJ1979 Red and Black

思路:先將圖存在二維陣列a[20][21]中,標記@的位置為x,y。從@處出發,不停的把鄰接部分用#代替,直到圖中不存在‘.’為止。

總共進行DFS次數就是答案了。4個方向對應四種狀態。

程式碼如下:

#include<iostream>
using namespace std;
int num,w,h;
int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 };
char a[20][21];
void dfs(int x, int y) {
    num++;
    a[x][y] = '#';
    for (int i = 0;i < 4;i++) {
        int nx = x + dx[i], ny = y + dy[i];
        if (0 <= nx&&nx < h && 0 <= ny&&ny < w&&a[nx][ny] == '.')
            dfs(nx, ny);
    }
    return;
}
int main() {
    while (cin >> w >> h) {
        if (w == 0 && h == 0)
            break;
        int x, y;num = 0;
        for(int i=0;i<h;i++)
            for (int j = 0;j < w;j++) {
                cin >> a[i][j];
                if (a[i][j] == '@') {
                    x = i;y = j;
                }
            }
        dfs(x, y);
        cout << num << endl;
    }
    return 0;
}