这是一题八皇后的题,挺经典的。
给你一个k,表示有k组测试,接下来有8x8列,找出 最大皇后位置和最大
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
int p[9][9];
int vis[3][20];
int MAX = 0;
int n;
void dfs(int A,int m)
{
if(A == 8)
{
MAX = max(MAX,m);
return;
}
else{
for(int i = 0; i<8; i++)
if(!vis[0][i]&&!vis[1][A+i]&&!vis[2][A-i+8])
{
m +=p[A][i];
vis[0][i] = vis[1][A+i] = vis[2][A-i+8] = 1;
dfs(A+1,m);
vis[0][i] = vis[1][A+i] = vis[2][A-i+8] = 0;
m -=p[A][i];
}
}
}
int main()
{
scanf("%d",&n);
while(n--)
{
memset(vis,0,sizeof(vis));
for(int i = 0;i <8;i++)
{
for(int j = 0; j < 8; j++)
scanf("%d",&p[i][j]);
}
MAX = 0;
dfs(0,0);
printf("%5d\n",MAX);
}
return 0;
}