链接: https://pan.baidu.com/s/1FXeJS3Gc1axvfuJqCtenuQ
提取码: 14hb
好的,开始编代码了
using System;
namespace acyclic
{
class Program
{
class Graph
{
public int num;
public int[][] edge;
public int[] next;
public bool[] visited;
public bool cyclic;
public int cycleLength;
public string path;
public bool[] wholeVisited;
public Graph()
{
cyclic = false;
cycleLength = 0;
path = "";
num = int.Parse(Console.ReadLine());
next = new int[num + 1];
visited = new bool[num + 1];
edge = new int[num + 1][];
for(int i = 1; i<=num; i++)
{
wholeVisited[i] = false;
visited[i] = false;
next[i] = -1;
string[] words = Console.ReadLine().Trim().Split(null);
int m = int.Parse(words[0]);
if(words.Length != m + 1)
{
Console.WriteLine("bad input!");
return;
}
edge[i] = new int[m];
for(int j = 0; j < m; j++)
{
edge[i][j] = int.Parse(words[j + 1]);
}
}
}
public void DFS(int i)
{
wholeVisited[i] = true;
if (cyclic)
{
return;
}
visited[i] = true;
for(int j = 0; j < edge[i].Length; j++)
{
if (cyclic)
{
visited[i] = false;
return;
}
if (!visited[edge[i][j]])
{
next[i] = edge[i][j];
DFS(edge[i][j]);
}
else
{
cyclic = true;
int start = edge[i][j];
int now = next[start];
path = start.ToString();
cycleLength = 1;
while(true)
{
path = path + " " + now.ToString();
cycleLength++;
if(now == i)
{
break;
}
now = next[now];
}
visited[i] = false;
return;
}
}
visited[i] = false;
}
}
static void Main(string[] args)
{
Graph g = new Graph();
for(int i = 1; i <= g.num; i++)
{
if (g.wholeVisited[i])
{
continue;
}
g.DFS(i);
if (g.cyclic)
{
Console.WriteLine(g.cycleLength);
Console.WriteLine(g.path);
return;
}
}
Console.WriteLine("neni");
}
}
}