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