Не проходит все тесты. Задача обход графа DFS
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
int S = 0;
int count = 1;
cin >> n;
cin >> S;
vector<vector<int>> mat(n, vector<int>(n, 0)); // матрица смежности
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> mat[i][j];
}
}
stack<int> st; // стек активных вершин
vector<int> used(n + 1, 0); // массив used
st.push(S); // обход с 1 вершины
used[1] = S;
for (int j = 0; j < n; j++) // делаем обход по строкам и записываем номер вершины в стек активных вершин
{
if (mat[S][j] == 1)
{
st.push(j);
}
}
for (int i = 1; i <= n; ++i) // поиск в глубину
{
if (used[i] == 0)
{
count++;
while (!st.empty()) // пока стек не пустой ИЩЕМ ВЕРШИНУ, ГДЕ МЫ НЕ БЫЛИ
{
bool ok = false; // можем ли сделать шаг назад
for (int to : mat[S]) // foreach, перебираем все вершины
{
if (used[i] == 1) // если вершина в массиве used равна 0, то мы там еще не были
{
used[to] = 1; //покраска
st.push(to); // отправляем вершину в стек
ok = true; // смогли сделать шаг далее
break; // если нашли хоть одну вершину, то выходим из цикла
}
}
if (!ok) st.pop(); // если не нашли, выкидываем вершину из стека
}
}
}
cout << count << '\n';
}
Добрый вечер! Задача на обход графа. Не проходит все тесты. В чем может быть ошибка?
Дан неориентированный невзвешенный граф. Для него вам необходимо найти количество вершин, лежащих в одной компоненте связности с данной вершиной (считая эту вершину).
Входные данные В первой строке входных данных содержатся два числа: N и S (1 ≤ N ≤ 100; 1 ≤ S ≤ N), где N – количество вершин графа, а S – заданная вершина. В следующих N строках записано по N чисел – матрица смежности графа, в которой 0 означает отсутствие ребра между вершинами, а 1 – его наличие. Гарантируется, что на главной диагонали матрицы всегда стоят нули.
Выходные данные Выведите одно целое число – искомое количество вершин.
Примеры
входные данные
3 1
0 1 1
1 0 0
1 0 0
выходные данные
3