#c #depth-first-search
#c #поиск в глубину
Вопрос:
Я реализую поиск в глубину на графике, чтобы найти минимальную сумму всех подключенных компонентов. Но я получаю ошибку переполнения стека. Я попытался отладить его, но не смог этого сделать.
Кто-нибудь может помочь?
Вот код:
#include <bits/stdc .h>
using namespace std;
void DFS(int x, vector<vector<int>> graph, vector<int> cost, vector<bool> visited, int amp;c)
{
c = min(c, cost[x]);
visited[x] = true;
for (int n = 0; n < (int)graph[x].size(); n )
{
if (!visited[graph[x][n]])
DFS(x, graph, cost, visited, c);
}
}
void solve()
{
int nodes, edges;
cin >> nodes >> edges;
vector<int> cost(nodes);
vector<bool> visited(nodes);
vector<vector<int>> graph(nodes);
for (int i = 0; i < nodes; i )
cin >> cost[i];
for (int i = 0; i < edges; i )
{
int a, b;
cin >> a >> b;
graph[a - 1].push_back(b - 1);
graph[b - 1].push_back(a - 1);
}
int ans = 0;
for (int i = 0; i < nodes; i )
{
if (!visited[i])
{
int c = cost[i];
DFS(i, graph, cost,visited, c);
ans = c;
}
}
cout << ans << "n";
}
int main()
{
ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
solve();
}
Комментарии:
1. Попробуйте передать все векторы по ссылке вместо копирования.
2. Какова ваша среда? С каким размером графика вы имеете дело?
3. @MikeCAT Я должен сделать это для графика с миллионом узлов. Я пытаюсь запустить его на небольших входных данных, но он все еще не запущен. Кстати, я запускаю программу через терминал в Ubuntu.
4. Каков ваш вклад?
5. Для миллиона узлов у вас потенциально есть глубина стека в один миллион. Современные среды предоставляют вам всего несколько килобайт стекового пространства.
Ответ №1:
Конечно
DFS(x, graph, cost, visited, c);
должно быть
DFS(graph[x][n], graph, cost, visited, c);
Вы действительно должны были заметить это в отладчике.