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; }