这是NP的
算是一道模板题 学习下
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#define read(x) scanf("%d",&(x))
using namespace std;
typedef long long ll;
const int N=20;
int n,m;
int w[N][N];
ll f[1<<N][N],ans;
int main(){
int iu,iv;
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
read(n); read(m);
for (int i=1;i<=m;i++) read(iu),read(iv),iu--,iv--,w[iu][iv]=w[iv][iu]=1;
for (int i=0;i<n;i++) f[1<<i][i]=1;
int t;
for (int s=1;s<(1<<n);s++){
for (t=0;!(s>>t&1);t++);
for (int x=0;x<n;x++)
if ((s>>x&1) && f[s][x]){
for (int i=t;i<n;i++)
if (w[x][i]){
if (s>>i&1){
if (s==(1<<x|1<<i)) continue;
if (i==t) ans+=f[s][x];
}else
f[s|1<<i][i]+=f[s][x];
}
}
}
printf("%I64d\n",ans>>1);
return 0;
}