这道题,明显就是八皇后问题 就是给你一个8*8的方格 问你找到八皇后占位置的 总和的最大值 这个题其实很简单 可以先开3个数组 来标记 一个标记 列 两个来标记 对角线 然后这道题深搜 就行了 其实对于行来说 直接就是 一行搜下来就行(因为一行肯定有一个皇后 来站着 ) 还有个坑点就是 我们这个要求 按着右边输出 右边输出就要(“%5d”) 我具体也不知道为什么 但是听学长们说 要求 ~~~ 行吧
#include<math.h>
#include<algorithm>
#include<stdio.h>
#include<iostream>
#include<set>
#include<map>
#include<string.h>
using namespace std;
int mapp[10][10];
int bj[5][1000];
int sum=0;
void dfs(int x,int y)
{
if(x==8)
{
sum=max(y,sum);
return;
}
for(int i=0; i<8; i++)
{
if(!bj[0][i]&&!bj[1][x+i]&&!bj[2][x-i+7])
{
bj[0][i]=1;
bj[1][x+i]=1;
bj[2][x-i+7]=1;
dfs(x+1,y+mapp[x][i]);
bj[0][i]=0;
bj[1][x+i]=0;
bj[2][x-i+7]=0;
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
sum=0;
memset(bj,0,sizeof(bj));
for(int i=0; i<8; i++)
{
for(int j=0; j<8; j++)
{
scanf("%d",&mapp[i][j]);
}
}
dfs(0,0);
printf("%5d\n",sum);
}
return 0;
}