标签:scanf nbsp 完全 include mem cto tail clu [1]
题目: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\n"); printf("%d",head); for(int i=nt[head];i!=-1;i=nt[i]) printf(" %d",i); printf("\n"); } return 0; }
标签:scanf nbsp 完全 include mem cto tail clu [1]
原文地址:https://www.cnblogs.com/bk-201/p/9306836.html