#include<iostream>
int num,zu;
int a[50][2]={0};
int visit[11]={0};
int data[11][11]={0};
int tou=0;
int wei=1;
int last;
int flag=0;
int k=0;
int d[11][11]={0};
typedef struct node
{
int x;
int pre;
}node;
node point[10000]={0};
int l=0;
int b[1000]={0};
void prin(int i)
{
if(i==-1)
return;
//printf("(%d,%d)\n",dui[i].x ,dui[i].y );
prin(point[i].pre);
b[l]=point[i].x;
l++;
//printf("%d",point[i].x);
}
void p(int i)
{
if(i==-1)
return;
p(point[i].pre);
printf("%d",point[i].x);
}
int panduan(int k)
{
for(int i=k-1;k>=0;k--)
{
if(b[i]==b[k])
{
return 1;
}
}
return 0;
}
void bfs()
{
int tou=0;
int wei=1;
while(tou<wei)
{
last=tou;
prin(tou);
if(panduan(l))
{
flag=1;
p(tou);
}
l=0;
for(int i=0;i<10;i++)
b[i]=0;
for(int k=1;k<=num;k++)
{
if(data[point[tou].x][k]==1)
{
data[point[tou].x][k]=0;
point[wei].x=k;
//printf("%d",point[wei].x);
point[wei].pre=tou;
wei++;
}
}
tou++;
}
}
int main()
{ freopen("input.txt","r",stdin);
scanf("%d%d",&num,&zu);
for(int i=0;i<zu;i++)
{
for(int j=0;j<2;j++)
{ scanf("%d",&a[i][j]);}
}
for(int i=0;i<=zu;i++)
{
data[a[i][0]][a[i][1]]=1;
}
for(int i=1;i<=num;i++)
{
for(int j=1;j<=num;j++)
{
d[i][j]=data[i][j];
}
}
for(int i=1;i<=num;i++)
for(int j=1;j<=num;j++)
{
if(flag==0){
if(data[i][j]==1)
{
//data[i][j]=0;
for(int u=1;u<=num;u++)
{
for(int t=1;t<=num;t++)
{
d[u][t]=data[u][t];
}
}
int tou=0;
point[tou].x=i;
point[tou].pre=-1;
bfs();
}
}
}
}
原文:http://www.cnblogs.com/dahuacarry/p/6420666.html