Как добавить значение локальной переменной в vector в рекурсии?

Я решаю задачу о графиках и использовал этот код (DFS) для добавления значений в вектор во время прогулки по графику:

int matrix[N][N]; int used[N];
vector<vector<int> > list;

void dfs(int u){

    used[u] = 1;

    int i = 0;
    for ( i = 1; i <= n; i++ )
    {
        if ( matrix[u][i] && !used[i] )
        {
            list[u].push_back(i);
            dfs(i);
        }
    }
}

Но когда я читаю значения из этого списка:

int size = list.size();
for ( int i = 1; i < size; i++ )
{
    int temp_size = list[i].size();
    for ( int j = 1; j <= temp_size; j++ )
    {
        printf("%d %d\n", i, list[i][j]);
    }
}

программа возвращает мне что-то вроде:

1 3473604

2 3473604

3 3473604

В чем проблема? Пожалуйста помоги.

2 ответа

В вашей программе много ошибок:

использовать

int matrix[N][N]; int used[N];

Вы должны инициализировать их с помощью const:

const int N = 0, n = 0;

Не можете использовать:

list[u].push_back(i)

потому что подписанное значение не является массивом (список)

То же самое касается:

list[i][j] and
list[i]

А также

int size = list.size();

значение unsigned long может не вписываться в тип получателя int, поскольку size возвращает int.

Ооо) Это глупая ошибка, которую я сделал. Проблема заключалась в том, что я сохранял значения в векторе, начиная с 1. Но во внутренних векторах, например, list[1], когда я push_back(value), тогда это значение помещается в позицию 0, как этот список [1] ​​[0], Поэтому мне нужно переписать мой цикл так:

int size = list.size();
for ( int i = 1; i < size; i++ )
{
    int temp_size = list[i].size();
    for ( int j = 0; j < temp_size; j++ )
    {
        printf("%d %d\n", i, list[i][j]);
    }
}

int j должен начинаться с 0. Спасибо всем!

Другие вопросы по тегам