前两题就是憨批题,从第三道开始补题吧
一个简单的DFS。看错题意了以为是==8皇后,事实上就是个不断模拟进行搜索的过程,用个deep记录遍历深度即可。
#include <bits/stdc++.h>
using namespace std;
int N, K;
int a[10][10];
//int b[10][10];
bool vis[10];
int ans;
int num;
int deep;
void DFS(int x) {
//终点必须是1
for(int i = 1; i <= N; ++i) {
if(!vis[i] && x != i) {
vis[i] = 1;
deep++;
ans += a[x][i];
if(deep == N) {
if(ans == K && i == 1) {
num++;
}
}else {
DFS(i);
}
vis[i] = 0;
deep--;
ans -= a[x][i];
}
}
}
int main () {
cin >> N >> K;
for(int i = 1; i <= N; ++i) {
for(int j = 1; j <= N; ++j) {
cin >> a[i][j];
}
}
for(int i = 1; i <= N; ++i) {
if(1 != i) {
vis[i] = 1;
deep++;
ans += a[1][i];
DFS(i);
ans -= a[1][i];
deep--;
vis[i] = 0;
}
}
cout << num << endl;
}