AOJ 1103 Board Arrangements for Concentration Games
問題
AからHのカードを並べてく、カードのセットに相対的な位置だけでカウントしていくから AとBのセットをかえても同じ
解法
DFSで解きます。
コード
int board[4][4]; int dy[4], dx[4]; int dfs(int n){ if(n >= 8) return 1; int res = 0; int y, x; rep(y, 4){ rep(x, 4) if(!board[y][x]) break; if(x != 4) break; } int d; rep(d, 4){ int ny = y+dy[d], nx = x+dx[d]; if(ny < 0 || nx < 0 || ny >= 4 || nx >= 4 || board[ny][nx] != 0) continue; board[y][x] = board[ny][nx] = 1; res += dfs(n+1); board[y][x] = board[ny][nx] = 0; } return res; } int main(){ int i; while(1){ rep(i, 4) if(scanf("%d%d", &dx[i], &dy[i]) && dx[0] >= 4) return 0; memset(board, 0, sizeof(board)); printf("%d\n", dfs(0)); } return 0; }