#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
int G[N][N];
int path[N], visited[N], n, cycle;
void input(){
memset(G, 0, sizeof(G));
memset(visited, 0, sizeof(visited));
memset(path, 0, sizeof(path));
printf("输入矩阵维度:\n");
scanf("%d",&n);
printf("请输入 %d * %d 矩阵(1=存在弧,0=不存在弧):\n",n,n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&G[i][j]);
}
}
}
int DFS(int u, int start){
visited[u] = -1;
path[u] = start;
for (int i = 0; i < n;i++){
if (G[u][i]&&i!=start){
if (visited[i]<0){
cycle = u;
return 0;
}
if (!DFS(i,u)){
return 0;
}
}
}
visited[u] = 1;
return 1;
}
void DisPath(int u){
if (u<0)
{
return;
}
DisPath(path[u]);
printf("%d ",u);
}
void main(){
input();
cycle = -1;
for (int i = 0; i < n;i++)
{
if (!visited[i]&&!DFS(i,-1))
{
break;
}
}
if (cycle<0)
{
printf("不存在环!");
}
else
{
printf("存在环!\n");
DisPath(cycle);
printf("\n");
}
}