另一个 c#编程题,请兄弟进链接查看文本,会的留下代码,输入输出得一致,感谢

链接: 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");

        }
    }
}