2012 Multi-University Training Contest 4-1007 hdu4337 King Arthur's Knights

来源:互联网 发布:java 基本数据类型 编辑:程序博客网 时间:2024/05/10 12:54

http://acm.hdu.edu.cn/showproblem.php?pid=4337

求哈密尔顿回路的一个可行解

#include <iostream>#include <cstdio>#include <memory.h>#include <algorithm>#include <cmath>#include <string>using namespace std;#define N 155int c[N][N],x[N],flag,n,m;void output(int x[]){    printf("%d",x[1]);    for (int i=2;i<=n;i++)        printf(" %d",x[i]);    printf("\n");}void nextvalue(int k){    int j;    while(1)    {        x[k]=(int)fmod((double)x[k]+1,(double)n+1);        if (x[k]==0) return;        if (c[x[k-1]][x[k]])        {            for (j=1;j<=k-1;j++)                if (x[j]==x[k]) break;            if (j==k)            {                if (k<n || (k==n && c[x[n]][1]))                    return;            }        }    }}void hamilton(int k){    while (!flag)    {        nextvalue(k);        if (x[k]==0) return;        if (k==n)            {                flag=1;                output(x);                return;            }        else            hamilton(k+1);    }}int main(){    int a,b;    while (scanf("%d%d",&n,&m)!=EOF)    {        x[1]=1;        for (int i=2;i<=n;i++)            x[i]=0;        memset(c,0,sizeof(c));        while (m--)        {            scanf("%d%d",&a,&b);            c[a][b]=c[b][a]=1;        }        flag=0;        hamilton(2);        if (!flag) printf("no solution\n");    }    return 0;}


原创粉丝点击