Неправильный вывод C#
Задача звучит так:
Дан неориентированный невзвешенный граф. Необходимо посчитать количество его компонент связности и вывести их.
Во входном файле записано два числа N и M (0 < N ≤ 100000, 0 ≤ M ≤ 100000). В следующих M строках записаны по два числа i и j (1 ≤ i, j ≤ N), которые означают, что вершины i и j соединены ребром.
В первой строчке выходного файла выведите количество компонент связности. Далее выведите сами компоненты связности в следующем формате: в первой строке количество вершин в компоненте, во второй - сами вершины в произвольном порядке. Вывод соответственно не тот, который нужен.
Код:
using System;
using System.Collections.Generic;
class Program
{
private static int walk(List<List<int>> mm, List<int> seen, List<int> vert, int r, int
color)
{
if (seen[r] != 0)
{
return 0;
}
seen[r] = color;
vert.Add(r);
int cnt = 1;
foreach (int i in mm[r])
{
cnt += walk(mm, seen, vert, i, color);
}
return cnt;
}
private static void Main(string[] args)
{
int n = 0;
int m = 0;
string[] temp = Console.ReadLine().Split(' ');
string tempVar = temp[0];
if (tempVar != null)
{
n = int.Parse(tempVar);
}
string tempVar2 = temp[1];
if (tempVar2 != null)
{
m = int.Parse(tempVar2);
}
List<int> color = new List<int>(n);
List<List<int>> mm = new List<List<int>>(n);
for (int i = 0; i < n; i++)
{
color.Add(0);
mm.Add(new List<int>());
}
while (m-- > 0)
{
int i = 0;
int j = 0;
temp = Console.ReadLine().Split(' ');
string tempVar3 = temp[0];
if (tempVar3 != null)
{
i = int.Parse(tempVar3);
}
string tempVar4 = temp[1];
if (tempVar4 != null)
{
j = int.Parse(tempVar4);
}
i--;
j--;
mm[i].Add(j);
mm[j].Add(i);
}
int c = 0;
List<int> ncolor = new List<int>(n);
for (int i = 0; i < n; i++)
{
ncolor.Add(0);
}
List<List<int>> colvert = new List<List<int>>();
for (int i = 0; i < n; i++)
{
if (color[i] == 0)
{
colvert.Add(new List<int>());
ncolor[c] = walk(mm, color, colvert[colvert.Count - 1], i, c + 1);
c++;
}
}
Console.Write("{0:D}\n", c);
for (int i = 0; i < c; i++)
{
Console.Write("{0:D}\n", ncolor[i]);
foreach (var v in colvert[i])
{
Console.Write("{0:D} ", v + 1);
}
Console.Write("\n");
}
Console.ReadKey();
}
}
