首页 > 代码库 > 11D-哈密顿回路个数
11D-哈密顿回路个数
#include<stdio.h>long long dp[1<<19][19],ans;int n,m;int gr[19][19];int main(){ scanf("%d%d",&n,&m); int bit,i,j; for(i=0;i<m;i++){ int x,y; scanf("%d%d",&x,&y); x--,y--; gr[x][y]=gr[y][x]=1; if(x>y)dp[1<<y][x]=1; else dp[1<<x][y]=1; } for(bit=1;bit<(1<<n);bit++){ int lastbit = 0; while(!(1<<lastbit&bit))lastbit++; for(i=lastbit+1;i<n;i++){ if(bit&1<<i)continue; for(j=lastbit+1;j<n;j++){ if(gr[i][j])dp[bit|1<<i][j] += dp[bit][i]; } if(gr[lastbit][i])ans += dp[bit][i]; } } printf("%lld",(ans-m)>>1); return 0;}
11D-哈密顿回路个数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。