Untitled
unknown
plain_text
18 days ago
1.8 kB
0
Indexable
Never
#include <iostream> using namespace std; const int rows = 7; const int cols = 8; int board[rows][cols]; int _visitBoard[rows][cols]; int _cnt; int domino[7][7]; void countWay(int r, int c){ if(r==rows-1 && c==cols){ _cnt++; return; } //(r,c)(r,c+1) - ngang if(_visitBoard[r][c]==-1 && domino[board[r][c]][board[r][c+1]]==0 && c<7){ domino[board[r][c]][board[r][c+1]] = 1; _visitBoard[r][c] = _visitBoard[r][c+1] = _visitBoard[c][r] = _visitBoard[c+1][r] = 0; if(c==6) countWay(r+1, 0); else countWay(r, c+2); domino[board[r][c]][board[r][c+1]] = 0; _visitBoard[r][c] = _visitBoard[r][c+1] = _visitBoard[c][r] = _visitBoard[c+1][r] = -1; } //(r,c)(r+1,c) - doc if(_visitBoard[r][c]==-1 && domino[board[r][c]][board[r+1][c]]==0 && r<=5){ domino[board[r][c]][board[r+1][c]] = 1; _visitBoard[r][c] = _visitBoard[r+1][c] = _visitBoard[c][r] = _visitBoard[c][r+1] = 0; if(c==7) countWay(r+1, 0); else countWay(r, c+1); domino[board[r][c]][board[r+1][c]] = 0; _visitBoard[r][c] = _visitBoard[r+1][c] = _visitBoard[c][r] = _visitBoard[c][r+1] = -1; } //k dat if(c countWay(r, c+1); } int main(){ freopen("input.txt", "r", stdin); int T; cin >> T; for(int tc=1; tc<=T; tc++){ for(int i=0; i<rows; i++) for(int j=0; j<cols; j++) cin >> board[i][j]; for(int i=0; i<rows; i++) for(int j=0; j<cols; j++) _visitBoard[i][j]=-1; countWay(0, 0); cout << "Case #" << tc << " " << _cnt << endl; } return 0; }