AtCoder Beginner Contest 183
前两题就是憨批题,从第三道开始补题吧
一个简单的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; }
作者:LightAc
出处:https://www.cnblogs.com/lightac/
联系:
Email: dzz@stu.ouc.edu.cn
QQ: 1171613053
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。