Untitled

 avatar
unknown
plain_text
2 years ago
1.1 kB
3
Indexable
#include<iostream>
using namespace std;

int t, n;
char map[5][5];
int vs[5][5];
int ans;

bool checksafe(int x, int y)
{
	for (int i=x-1; i>=0;i--)
	{
		if (vs[i][y] ==1) return false;
		if (vs[i][y] ==2) break;
	}
	for (int i=x+1; i<n; i++)
	{
		if (vs[i][y] ==1) return false;
		if (vs[i][y] ==2) break;
	}
	for (int j=y-1; j>=0; j--)
	{
		if (vs[x][j] ==1) return false;
		if (vs[x][j] ==2) break;
	}
	for (int j=y+1; j<n; j++)
	{
		if (vs[x][j] ==1) return false;
		if (vs[x][j] ==2) break;
	}
	return true;
}

void backtrack(int dem)
{
	
	for (int i=0; i<n; i++)
		for (int j=0; j<n; j++)
		{
			if (checksafe(i,j) && vs[i][j] == 0)
			{
				vs[i][j] = 1;
				backtrack(dem+1);
				vs[i][j] = 0;
			}
		}
		if (ans < dem) ans = dem;
}


int main()
{
	cin >> t;
	for (int tc = 1; tc<=t; tc++)
	{
		cin >> n;
		for (int i=0; i<n; i++)
			for (int j=0; j<n; j++)
			{
				cin >> map[i][j];
				vs[i][j] = 0;
				if (map[i][j] == 'X') vs[i][j] = 2;
			}

		ans = 0;
		backtrack(0);
		cout << "Case #" << tc << endl << ans << endl;
		
	}


}