rt.思路是搞一个 solve 函数类似 DFS 的查找方案数,但是不会写边界条件,希望大佬都能帮忙呢。
# include <bits/stdc++.h>
# define ll long long
# define N 15
# define M 110
using namespace std;
int n, m, head[N], ver[M], Next[M], tot, ans, x, y, z;
bool F[N], flag;
void ADD (int x, int y) {
ver[++ tot] = y;
Next[tot] = head[x];
head[x] = tot;
}
void solve (int x) {
F[x] = true;
flag = true;
for (int i = 1; i <= n; i ++) {
if (! F[i]) {
flag = false;
break;
}
}
if (flag) {
ans ++;
memset (F, 0, sizeof (F));
return ;
}
for (int i = head[x]; ~ i; i = Next[i]) {
int y = ver[i];
if (F[y]) continue;
solve (y);
}
}
int main () {
cin >> n >> m;
while (m --) {
cin >> x >> y;
ADD (x, y);
}
solve (1);
cout << ans;
return 0;
}