题目:八皇后问题的基础上输入每个格子上的数值。问哪一组数的和最小
#include <cstdio>
#include <string.h>
#include <cstdlib>
#include <cmath>
#include <ctgmath>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int xunhuan;
cin>> xunhuan;
while(xunhuan--){
//每个格子的数值输入
int num[8][8];
for(int m = 0; m < 8; m++){
for(int n = 0; n < 8; n++){
cin>>num[m][n];
}
}
int t = 1;
int a[8] = {0};
int b[15] = {0};
int c[15] = {0};
int j = 0,i=0;
int temp = 0;
vector<int> m;
vector<int>::iterator it;
vector<int> sum;
while(1){
for(i = 0; i <= 7; i ++){
for(j = 0; j <= 7; j ++){
if((a[j]==0) && (b[i+j]==0) && (c[i-j+7]==0) ){//这一点可以有皇后
m.push_back(j);
a[j]=1;
b[i+j]=1;
c[i-j+7]=1;
break;
}
}
//如果走完了还没有位置
if(j == 8){
Next_One: while(1){
if(i >= 0){
i--;
temp = m[i];
//删除原来皇后的记录
a[temp]=0;
b[i+temp]=0;
c[i-temp+7]=0;
m.pop_back();
for(j = temp +1; j <= 7; j ++){
if((a[j]==0) && (b[i+j]==0) && (c[i-j+7]==0) ){//这一点可以有皇后
m.push_back(j);
a[j]=1;
b[i+j]=1;
c[i-j+7]=1;
break;
}
}
if(j != 8) break;
}
}
}
}
//计算和
int sumnum = 0;int ii = 0;
for(int q = 0; q < 8; q++){
sumnum += num[ii++][m[q]];
}
sum.push_back(sumnum);
t++;
if(t==93) break;
goto Next_One;
}
// goto Next_One;
sort(sum.begin(), sum.end());
printf("%5d\n",sum[91]);
}
return 0;
}