3194:Equidivisions
keyword
探索 C++
概要
N*N (N<100)のボードの各セルに1~Nの数字が書かれている。同じ数字が全て連結になっているかどうか判定する問題。
探索するだけ。
char board[102][102]; int dy[] = {0,0,1,-1}, dx[] = {1,-1,0,0}; int d; void dfs(int y, int x, int col){ board[y][x] = ~board[y][x]; d++; for(int k=0; k<4; k++){ int ny = y + dy[k], nx = x + dx[k]; if(board[ny][nx] == col) dfs(ny,nx,col); } } int main(){ int i, j, x, y, n; while(n = readint(), n){ REP(i,102)REP(j,102) board[i][j] = 0; REP(j,n-1){ REP(i,n){ x = readint(); y = readint(); board[y][x] = j+1; } } FOR(i,1,n+1)FOR(j,1,n+1)if(board[i][j]==0) board[i][j] = n; FOR(i,1,n+1)FOR(j,1,n+1)if(1 <=board[i][j] && board[i][j]<=n){ d = 0; dfs(i,j,board[i][j]); if(d!=n){ goto end; } } end:; if(i==n+1 && j==n+1)puts("good"); else puts("wrong"); } return 0; }