競プロ今日の備忘録

問題を解いた上での気づき、反省を

POJ_1979: Red and Black

1979 -- Red and Black

深さ優先探索。 解けるかどうかの確認だけのつもりがコーディングがうまくいかなくて苦戦した。 よくある'='と'=='のミスである。 しないように努めたいし、したとしても異状が起きた時にすぐに気づけるようにしたい。

#include <cstdio>

using namespace std;

char dots[20][20];
int H=-1,W=-1,xs,ys,dx[4]={1,0,-1,0},dy[4]={0,-1,0,1},cnt,nx,ny;

void dfs(int y,int x){
  //if(dots[y][x]=='*') return;

  dots[y][x]='*';
  cnt++;
  for(int i=0;i<4;i++){
    if(0<=x+dx[i] && x+dx[i]<W && 0<=y+dy[i] && y+dy[i]<H && dots[y+dy[i]][x+dx[i]]=='.'){
      dfs(y+dy[i],x+dx[i]);
    }
  }
  return;
}

int main(){
  while(1){
    cnt=0;
    scanf("%d%d",&W,&H);
    if(H==0 && W==0) break;

    for(int i=0;i<H;i++){
      scanf("%s",&dots[i]);
    }

    for(int i=0;i<H;i++){
      for(int j=0;j<W;j++){
        if(dots[i][j]=='@'){
          xs=j; ys=i;
        }
      }
    }

    dfs(ys,xs);

    printf("%d\n",cnt);
  }

  return 0;
}