Как построить компоненту связности,содержащую первую вершину для неориентированного графа C#
Дан неориентированный граф, возможно, с петлями и кратными ребрами. Необходимо построить компоненту связности, содержащую первую вершину.
Формат ввода следующий:
В первой строке записаны два целых числа N (1 ≤ N ≤ 103) и M (0 ≤ M ≤ 5 * 105) — количество вершин и ребер в графе. В последующих M строках перечислены ребра — пары чисел, определяющие номера вершин, которые соединяют ребра.
Формат вывода:
В первую строку выходного файла выведите число K — количество вершин в компоненте связности. Во вторую строку выведите K целых чисел — вершины компоненты связности, перечисленные в порядке возрастания номеров.
Вот мой код, подскажите пожалуйста, что не так?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Контест_3
{
internal class Program
{
public class Graph
{
private int V;
private List<int>[] adj;
public Graph(int v) //Граф через список смежности
{
V = v;
adj = new List<int>[V];
for (int i = 0; i < v; i++)
{
adj[i] = new List<int>(); //Представление списка смежности через массив
}
}
public void addEdge(int v, int w) //Добавление ребер
{
adj[v].Add(w);
}
void DFSUtil(int v, bool[] visited) //Поиск в глубину
{
visited[v] = true; //Отметка "посещения" и вывод номера вершины
Console.Write((v+1) + " ");
foreach (int i in adj[v])
{
int n = i;
if (!visited[n])
DFSUtil(n, visited);
}
}
public void DFS() //Изначально отмечает все вершины как "непосещенные"
{
bool[] visited = new bool[V];
for (int i = 0; i < V; ++i)
if (visited[i] == false)
DFSUtil(i, visited);
}
}
static void Main(string[] args)
{
//Ввод
string[] vvod = Console.ReadLine().Split();
int V = Convert.ToInt32(vvod[0]);
int E = Convert.ToInt32(vvod[1]);
Graph g = new Graph(V);
for (int i = 0; i < E; i++)
{
int[] vvod2 = Console.ReadLine().Split().Select(a => int.Parse(a)).ToArray();
g.addEdge(vvod2[0], vvod2[1]);
//Console.Write(vvod2[0] + " ");
//Console.WriteLine(vvod2[1]);
}
g.DFS();
Console.ReadLine();
//Ввод
}
}
}