
题意 输入8x8的棋盘 在棋盘上放置8个皇后 输出8个皇后位置对应数字之和的最大值
回溯,一年前做的题目,竟然又碰到了,之前没学过dfs,对着题解思考了很长时间。。。
粗心的我,写错了一个变量名,查了很长时间……
#include<bits/stdc++.h>
#define LL long long
#define maxn 50010
using namespace std;
int chess[10][10];
int queen[10];
int ans=0;
void dfs(int row,int sum)
{
if(row==9)
{
ans=max(ans,sum);
}
else
{
for(int i=1; i<=8; i++)
{
queen[row]=i;
bool flag=true;
for(int j=1; j<row; j++)
{
if(queen[j]==queen[row]||j-queen[j]==row-queen[row]||j+queen[j]==row+queen[row])
{
flag=false;
break;
}
}
if(flag)
{
dfs(row+1,sum+chess[row][i]);
}
}
}
}
int main()
{
//ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--)
{
ans=0;
for(int i=1; i<=8; i++)
{
for(int j=1; j<=8; j++)
{
cin>>chess[i][j];
}
}
dfs(1,0);
cout<<setiosflags(ios::right)<<setw(5)<<ans<<endl;
}
return 0;
}