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;
}
浙公网安备 33010602011771号