7 5
1 2 3 4 4 5 6 7 7 6
5 5
1 2 2 3 3 4 4 5 3 1
4 3
1 2 3 2 4 3
3 3
8 4 4 6 6 8
9 37
1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 4 3 5 3 6 3 7 3 8 3 9 4 5 4 6 4 7 4 8 4 9 5 6 5 7 5 8 5 9 6 7 6 8 6 9 7 8 7 9 8 9 9 3
9 8
1 2 2 3 3 4 4 6 5 6 6 7 7 8 8 9
4 3
1 2 2 3 3 4
5 5
1 2 1 3 2 4 2 5 5 4
0 0
//不对
#include<stdio.h>
#include<stdlib.h>
int shu,bian;
int data[10000][2];
struct ueue{
int x;
int y;
int pre_node;
}q;
ueue queue[10000];
int head,tail;
void BFS();
int main()
{
freopen("a.txt","r",stdin);
while(1)
{
scanf("%d",&shu);
scanf("%d",&bian);
if(shu == 0 || bian == 0)
{
return 0;
}
for(int i = 0;i < bian;i++)
{
scanf("%d",&data[i][0]);
scanf("%d",&data[i][1]);
}
BFS();
for(int i = 0;i < bian;i++)
{
data[i][0] = 0;
data[i][1] = 0;
}
for(int k = 0;k < tail;k++)
{
q.x = 0;
q.y = 0;
q.pre_node = 0;
queue[k] = q;
}
tail = 0;
head = 0;
}
return 0;
}
void BFS()
{
for(int o = 0;o < bian;o++)
{
if(data[o][0] != 0 && data[o][1] != 0)
{
int t = 0;
q.x = data[o][0];
q.y = data[o][1];
queue[tail] = q;
tail += 1;
data[o][0] = 0;
data[o][1] = 0;
while(head != tail)
{
for(int i = 1;i < bian;i++)
{
if(data[i][0] == queue[head].y)
{
q.x = data[i][0];
q.y = data[i][1];
q.pre_node = head;
queue[tail] = q;
tail++;
data[i][0] = 0;
data[i][1] = 0;
}
}
head++;
}
for(int p = o;p < tail;p++)
{
for(int q = p + 1;q <= tail;q++)
{
if(queue[p].x == queue[q].y)
{
printf("%d",queue[q].x);
t = queue[q].pre_node;
while(1)
{
printf("%d",queue[t].x);
if(queue[t].x == queue[p].x)
{
printf("\n");
break;
}
t = queue[t].pre_node;
}
return;
}
}
}
}
}
printf("no\n");
}
//DFS yes
#include<stdio.h>
#include<stdlib.h>
int shu,bian;
int data[10000][2];
int dfs[10][10] = {0};
int cun[10] = {0};
int c[10];
int n;
bool ret = false;
void DFS(int step,int x);
int main()
{
freopen("a.txt","r",stdin);
while(1)
{
scanf("%d",&shu);
scanf("%d",&bian);
if(shu == 0 || bian == 0)
{
return 0;
}
for(int i = 0;i < bian;i++)
{
ret = false;
scanf("%d",&data[i][0]);
scanf("%d",&data[i][1]);
dfs[data[i][0]][data[i][1]] = 1;
}
/*for(int i = 1;i < 10;i++)
{
for(int j = 1;j < 10;j++)
{
printf("%d ",dfs[i][j]);
}
printf("\n");
}*/
for(int g = 1;g < 10;g++)
{
for(int h = 1;h < 10;h++)
{
if(dfs[g][h] == 1)
{
DFS(0,g);
if(ret == true)
{
goto v;
}
}
}
}
printf("no\n");
v:for(int i = 1;i < 10;i++)
{
for(int j = 1;j < 10;j++)
{
dfs[i][j] = 0;
cun[j] = 0;
c[j] = 0;
}
}
n = 0;
}
return 0;
}
void DFS(int step,int x)
{
//if(step == bian)
//{
// return;
//}
for(int i = x;i < 10;i++)
{
for(int j = 1;j < 10;j++)
{
if(dfs[i][j] == 1)
{
dfs[i][j] = 2;
cun[i] = 1;
c[n] = i;
n++;
if(cun[j])
{
ret = true;
for(int k = n - 1;;k--)
{
printf("%d ",c[k]);
if(c[k] == j)
{
printf("\n");
break;
}
}
break;
}
DFS(step + 1,j);
if(ret)
{
break;
}
cun[i] = 0;
n--;
c[n] = 0;
}
}
return;
}
}