P1657 选书 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

深搜题

定义一数组发flag[],判断是否选过,在定义一数组,判断是否喜欢f[][] 第几人喜欢第几本

#include<iostream>
#include<cmath>
#include<cstring>
#define N 25
using namespace std;

int n;
int ans;
int a,b;
int aa[N],bb[N];
int f[N][N]; 
int flag[N];
int dfs(int x){
	for(int i=1;i<=n;i++){
		if(flag[i]==1&&f[x][i]==1)//没有被读过并且第i人想读 
		{
			flag[i]=0;
			if(x==n) ans++; //判断是否成功
			else dfs(x+1);
			flag[i]=1;
		}
}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a>>b;
		f[i][a]=1;
		f[i][b]=1;
		flag [i]=1;
	}
	dfs(1);
	cout<<ans;
} 

  

 

posted on 2022-08-21 11:25  ljq0120  阅读(43)  评论(0)    收藏  举报