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