题目链接:UVa 167 - The Sultan's Successors
回溯。
八皇后变形,每个棋格子多了权值,要求找到最大权值。
#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
int k;
int value[10][10];
int _max;
int vis[3][20];
void dfs(int cnt,int sum)
{
if(cnt == 8)
_max = max(_max,sum);
else
{
for(int i = 0;i < 8;i++)//行
{
if(!vis[0][i] && !vis[1][cnt + i] && !vis[2][cnt - i + 8])
{
vis[0][i] = vis[1][cnt + i] = vis[2][cnt - i + 8] = 1;
dfs(cnt + 1,sum + value[cnt][i]);
vis[0][i] = vis[1][cnt + i] = vis[2][cnt - i + 8] = 0;
}
}
}
}
int main()
{
cin >> k;
while(k--)
{
memset(vis,0,sizeof(vis));
_max = 0;
for(int i = 0;i < 8;i++)
for(int j = 0;j < 8;j++)
cin >> value[i][j];
dfs(0,0);
cout << setw(5) << _max << endl;
}
return 0;
}