简单搜索;
PS:最后一个点卡n==0 的情况,特判一下哦~
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define int long long #define MK 50 using namespace std; int n; bool step[MK][MK]; int a[MK][3]; int cnt[MK]; int ans; void bfs(int step) { if(step==n+1) { ans++; return; } for(int i=1;i<=2;i++) { if(cnt[a[step][i]]==1) { cnt[a[step][i]] = 0; bfs(step+1); cnt[a[step][i]] = 1; } } } signed main() { scanf("%lld",&n); if(n==0) { printf("0\n"); return 0; } for(int i=1;i<24;i++) { cnt[i] = 1; } for(int i=1;i<=n;i++) { scanf("%lld%lld",&a[i][1],&a[i][2]); } bfs(1); printf("%lld",ans); return 0; }