Untitled

mail@pastecode.io avatar
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;
}