題目:八皇后問題的基礎上輸入每個格子上的數值。問哪一組數的和最小
#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;
}