Не проходит все тесты. Задача обход графа 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

Ответы (0 шт):