Untitled
unknown
plain_text
2 years ago
1.1 kB
3
Indexable
#include<iostream> using namespace std; char M[4][4]; int N; int ans =0; bool check(int r,int c) { if(M[r][c] == 'X') { return false;} for(int i=c-1; i>=0; i--) { if(M[r][i] == 'C') {return false;} if(M[r][i] == 'X') {break;} } for(int i=r-1; i>=0; i--) { if(M[i][c] == 'C') {return false;} if(M[i][c] == 'X') {break;} } return true; } void backtrack(int k) { if(k == N*N) { int count_ =0; for(int i=0; i<N; i++) { for(int j=0; j< N; j++) { if(M[i][j] == 'C') { count_ ++;} } } if(count_ > ans ) { ans = count_;} return ; } if(check(k/N,k%N)) { for(int i=0; i<2; i++) { if(i==0) backtrack(k+1); else{ M[k/N][k%N] = 'C'; backtrack(k+1); M[k/N][k%N] = '.'; } } } else backtrack(k+1); } int main() { int t; cin >> t; for(int stt=1; stt <=t; stt ++) { cin >> N; for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { cin >> M[i][j]; } } /////////////////// backtrack(0); cout << "Case #" << stt << endl << ans << endl; ans =0; } }
Editor is loading...