1776 Task Sequences 竞赛图构造哈密顿路径
来源:互联网 发布:淘宝网水晶家纺被子 编辑:程序博客网 时间:2024/06/10 15:18
时空隧道
题目大意:
给出一张有向完全图(也就是竞赛图),要求求出一条哈密顿路径。
分析:
假设我们当前已经构造出了前n个点的哈密顿路径,存在ans数组中,我们接下来要向这条路径中加入第n+1个点,那么合法的加入分为三种情况:
第一种情况:
(简单易懂,不再赘述)
第二种情况:
(同样简单易懂,加到最后即可)
第三种情况:
(一定存在至少一条边指向第n+1个点,这样的话,只要把第n+1个点加在这个指向它的点的后面就好啦)
代码如下:
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>//by NeighThorn using namespace std;const int maxn=1000+5;int n,mp[maxn][maxn],ans[maxn];inline int read(void){ char ch=getchar();int f=1,x=0; while(!(ch>='0'&&ch<='9')){ if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return f*x; }signed main(void){ while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mp[i][j]=read(); for(int i=1;i<=n;i++){ int tmp=1; for(int j=i-1;j>=1;j--){ if(j==1&&mp[i][ans[1]]==1){ tmp=1; break; } else if(j==i-1&&mp[ans[j]][i]==1){ tmp=i; break; } else if(mp[ans[j]][i]==1){ tmp=j+1; break; } } for(int j=i;j>tmp;j--) ans[j]=ans[j-1]; ans[tmp]=i; } printf("1\n%d\n",n); for(int i=1;i<=n;i++) printf("%d ",ans[i]); puts(""); } return 0; }
by >_< NeighThorn
1 0
- 1776 Task Sequences 竞赛图构造哈密顿路径
- POJ 1776 - Task Sequences(哈密顿图)
- poj1776Task Sequences【竞赛图的哈密顿路径】
- [TOJ]1151. Task Sequences [zoj]3332.Strange Country II --竞赛图的哈密顿路
- poj1776 Task Sequences--竞赛图下的哈密顿通路+入门
- poj2438构造哈密顿图
- ZOJ3332-竞赛图中的哈密顿路
- zoj 3332 竞赛图哈密顿路
- 哈密顿图 poj 1776
- [构造 哈密顿路径] SRM 704 div1 HamiltonianConstruction
- hduTour Route【竞赛图的哈密顿回路】
- hdu 5424 哈密顿路径
- 无向哈密顿图回路Dirac 定理证明和竞赛图为哈密顿通路的证明过程
- CodeForces 11D A Simple Task (DP解哈密顿路径数目)
- 欧拉图,哈密顿图
- poj2438 哈密顿图
- 哈密顿图
- 哈密顿图
- 2-1 众数问题
- B/S总结
- 在屏幕中显示下拉表框
- 怎么吸引蜘蛛
- day14 python Css中的display
- 1776 Task Sequences 竞赛图构造哈密顿路径
- 常见git问题
- 基于struts2的日志管理系统
- PullToRefresh类库的使用
- ViewPager原理分析
- 我在这里
- Redis 入门之 HyperLogLog
- Android平台渗透测试套件--zANTI2.5
- 开始写第一篇博客 写给自己看 以后主要用来记录东西 当作云笔记吧