Untitled

mail@pastecode.io avatar
unknown
plain_text
2 years ago
1.1 kB
7
Indexable
#include<iostream>
using namespace std;
int N = 8;
int X[101], cot[101], d1[101], d2[101];
int arr[65][65];
int Max = 0;
int Sum = 0;
void inkq(){
	for (int i = 1; i <= N; i++)
	{

		for (int u = 1; u <= N; u++)
		{
			Sum += arr[u][X[u]];
		}
		if(Max < Sum)Max = Sum;
		Sum = 0;
	}
}
//cot, d1, d2 danh dau cot, cheo xuoi, cheo nguoc
void Try(int i){
	for (int j = 1; j <= N; j++)
	{
		if(cot[j] == 1 && d1[i - j + N] == 1 && d2[i+j-1] == 1){
			X[i] = j;
			cot[j] = d1[i-j+N] = d2[i+j-1] = 0;
			if(i == N) inkq();
			else Try(i+1);
			//backtrack
			cot[j] = d1[i-j + N] = d2[i+j-1] = 1;
		}
	}
}
int main(){
	int T;
	//freopen("queen.txt", "r", stdin);
	cin>>T;
	int k;
	for (int test = 1; test <= T; test++)
	{
		cin>>k;
		cout<<"Case #"<<test<<endl;
		for (int sobang = 0; sobang < k; sobang++)
		{
			for (int i = 1; i <= 8; i++)
			{
				for (int j = 1; j <= 8; j++)
				{
					cin>>arr[i][j];
				}
			}
			Max = 0;
			for (int i = 0; i <= 100; i++)
			{
				cot[i] = d1[i] = d2[i] = 1;
			}
			Try(1);
			cout<<Max<<endl;
			//Max = Sum = 0;
		}
	}
	
	return 0;
}