#include<iostream> #include<vector> #include<map> #include<string> #include<algorithm> #pragmawarning(disable:4996) usingnamespace std; typedeflonglong ll; intconst Max = 1e2 + 5; int lst[Max][Max]; intconst Inf = 1e8 + 5; vector<int> vec; int sum; int cur[Max];//记录每一行皇后所在列
voiddfs(int h)//第h行 { if (h == 9)//临界条件 { sum = 0; for (int i = 1; i <= 8; i++) sum += lst[i][cur[i]]; vec.push_back(sum); //把每次结果加入vec return; } for (int i = 1; i <= 8; i++)//把每一列尝试一遍 { int flag = 1; for (int j = 1; j < h; j++) { if (i == cur[j] || i + h == cur[j] + j || h - i == j - cur[j])//检查是否和前面的皇后冲突 { flag = 0; break; } } cur[h] = i;//记录 if (flag) dfs(h + 1);//符合条件则进入下一行 cur[h] = 0;//抹除记录,这个问题里不写也可 } }
intmain() { int n; cin >> n; while (n--) { vec.clear(); for (int i = 1; i <= 8; i++) { for (int j = 1; j <= 8; j++) cin >> lst[i][j]; } dfs(1); sort(vec.begin(), vec.end(), greater<int>());//递减排序 cout << vec[0] << endl; } }