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