Untitled
unknown
plain_text
2 years ago
1.8 kB
5
Indexable
#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;
}Editor is loading...