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;
}

 

posted @ 2020-11-15 22:25  LightAc  阅读(97)  评论(0编辑  收藏  举报
返回顶端