标签:
题意:给定一个邻接矩阵,即一幅有向图(有环),问最少的覆盖路径为几条,求出遍历顺序;
思路:竞赛图存在哈密顿路,一定能找到一条遍历所有点的路。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int mm[1005][1005]; char ch[1005]; int nxt[50010]; int n,m; int main() { int i,j,k,head,temp; while(scanf("%d",&n)!=EOF){ getchar(); for(i=0;i<n;i++){ gets(ch);temp=0; for(j=0;j<n;j++){ mm[i][j]=ch[temp]-‘0‘; temp+=2; } nxt[i]=-1; } //读入 head=0; for(i=1;i<n;i++){ if(mm[i][head]){ //插入到首部 nxt[i]=head; head=i; continue; } j=head; k=nxt[j]; while(k!=-1){ if(mm[j][i]&&mm[i][k]) break; //找到插入位置 j=k; k=nxt[j]; } nxt[i]=k; nxt[j]=i; //插入 } printf("1\n%d\n",n); for(i=0;i<n;i++){ if(i==0){ printf("%d",head+1); } else printf(" %d",head+1); head=nxt[head]; }printf("\n"); } return 0; }
标签:
原文地址:http://www.cnblogs.com/dominating/p/4776734.html