hdu4337 King Arthur's Knights
2016-01-02 16:12
246 查看
n个顶点的图中,每个顶点度数大于等于n/2,该图一定存在哈密顿回路。
1.从该图中寻找一条极长链,使两个端点不存在不在链中的与其相邻的点。
2.如果这条链不是回路,一定可以在其中找到两个相邻点分别与两个端点相邻,使用这两个点把链变成回路。
3.如果这条链是回路,一定可以找到某个点,其与不在链中的点相邻,将该点与下一个点断开,继续扩展极长链。
1.从该图中寻找一条极长链,使两个端点不存在不在链中的与其相邻的点。
2.如果这条链不是回路,一定可以在其中找到两个相邻点分别与两个端点相邻,使用这两个点把链变成回路。
3.如果这条链是回路,一定可以找到某个点,其与不在链中的点相邻,将该点与下一个点断开,继续扩展极长链。
#include #include #include #include using namespace std; bool bmt[151][151]; struct lst{ int qx,nx; }eg[151]; #define clr(a) memset(a,0,sizeof(a)) int n,m;bool bd[151]; void _fdp(int&hd,int&tl,int&ns){ int i,j;bool fg; while(1){ for(fg=0,i=1;i<=n&&!fg;++i){ if(bmt[i][hd]&&!bd[i]){ fg=1;bd[i]=1,eg[hd].qx=i,eg[i].nx=hd; hd=i,++ns; } } for(i=1;i<=n&&!fg;++i){ if(bmt[tl][i]&&!bd[i]){ fg=1;bd[i]=1,eg[tl].nx=i,eg[i].qx=tl; tl=i,++ns; } } if(!fg)break; } }; void _cycle(int hd,int tl){ int i,j,ti; for(i=eg[hd].nx;!(bmt[tl][i]&&bmt[hd][eg[i].nx]);i=eg[i].nx); j=eg[i].nx,ti=i; for(;i;i=eg[i].nx){ swap(eg[i].nx,eg[i].qx); } eg[hd].nx=j,eg[j].qx=hd; eg[tl].nx=ti,eg[ti].qx=tl; }; void _cut(int&hd,int&tl){ int i,j;bool fg; for(fg=0,i=1;i<=n&&!fg;++i){ if(!bd[i]){ for(j=1;j<=n&&!fg;++j){ if(bmt[i][j]&&bd[j]){ fg=1;hd=eg[j].nx,tl=j; eg[hd].qx=eg[tl].nx=0; } } } } }; void _cl(){ int i,j,ns,hd,tl; clr(eg),clr(bd); for(hd=tl=1;!bmt[hd][tl];++tl); eg[hd].nx=tl,eg[tl].qx=hd,ns=2; bd[hd]=bd[tl]=1; while(1){ _fdp(hd,tl,ns); if(!bmt[hd][tl]) _cycle(hd,tl); else eg[hd].qx=tl, eg[tl].nx=hd; if(ns==n) break; _cut(hd,tl); } printf("%d",hd); for(i=eg[hd].nx;i!=hd;i=eg[i].nx) printf(" %d",i); putchar('\n'); }; bool cl(){ int i,u,v; if(scanf("%d %d",&n,&m)==-1) return 0; clr(bmt); for(i=0;i
相关文章推荐
- JNI
- 链表
- myeclipse的相关设置
- 第 19 章 多文档界面
- 01 Matrix 杭电2015年12月校赛F (二维DP)
- 安装插件 使VIM自动补齐
- 借助TinyXml,C++实现Unity的PlayerPrefs 功能
- Fedora 20及以上版本在桌面显示图标
- vi编辑器基本使用方法
- EditText限制输入数字,精确到小数点后1位设置
- 亿级用户下的新浪微博平台架构
- curl 单个请求和多个请求
- (7)基于hadoop的简单网盘应用实现3
- socket笔记
- 账号menu
- bzoj 1449 [JSOI2009]球队收益(费用拆分,最小费用流)
- 使用keytool生成证书和秘钥
- 【python下使用OpenCV实现计算机视觉读书笔记4】保存摄像头视频
- 如何让神经网络把熊猫识别为秃鹫
- python基础