Как добавить значение локальной переменной в 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. Спасибо всем!