UESTC 1960 咸鱼自画像 构造哈密顿通路
Posted bk-201
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UESTC 1960 咸鱼自画像 构造哈密顿通路相关的知识,希望对你有一定的参考价值。
题目:http://www.qscoj.cn/#/problem/show/1960
有向图完全图是竞赛图。
定理:
竞赛图一定存在哈密顿路径
竞赛图存在哈密顿回路 充要条件是强连通。
构造方法一共3种
加到头
加到尾
插到中间
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<map> #include<set> using namespace std; int a[1005][1005]; char s[1005]; int nt[1005]; int main() { int n; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); for(int i=0;i<n;i++) { scanf("%s",s); for(int j=0;j<n;j++) if (s[j]==‘+‘) a[i][j]=1; } memset(nt,-1,sizeof(nt)); int head=0; int tail=1; if (a[1][0]) swap(head,tail); nt[head]=tail; for(int i=2;i<n;i++) { if (a[i][head]) { nt[i]=head; head=i; } else if (a[tail][i]) { nt[tail]=i; tail=i; } else { int now=head; while(nt[now]!=-1) { if (a[now][i]&&a[i][nt[now]]) { nt[i]=nt[now]; nt[now]=i; break; } now=nt[now]; } } } printf("YES "); printf("%d",head); for(int i=nt[head];i!=-1;i=nt[i]) printf(" %d",i); printf(" "); } return 0; }
以上是关于UESTC 1960 咸鱼自画像 构造哈密顿通路的主要内容,如果未能解决你的问题,请参考以下文章