Алгоритм Флойда в переполнении стека

Я пытаюсь реализовать алгоритм Флорида в C ++

У меня уже есть это:

a означает узел, где начинается ребро.

b означает узел, где заканчивается край.

т означает время края.

m означает количество ребер.

n означает количество узлов.

typedef pair<int,int> nodo;
vector <nodo> g[100000];

void preguntarFloyd()
{
g->clear();
int  m;
int contador = 0;
cin m;

for(int k = 0; k < m ; k++)
{
int a, b, t;
cin >> a >> b >> t;
g[a].push_back(nodo(b,t));
}

for (int k = 0; k < n; k++)
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j <n; j++)
{
if(g[i][k].second + g[k][j].second < g[i][j].second )
{
g[i][j].second = g[i][k].second + g[k][j].second;
}
}
}
}}

Когда я пытаюсь выполнить код, программа выдает сообщение «Выражение: нижний индекс вектора вне диапазона»

Я надеюсь, что вы, ребята, можете мне помочь, так как я не смог решить это!

0

Решение

Два наиболее распространенных способа представления графика:

  • Список смежностей
  • Матрица смежности

У вас есть одна структура данных, на этапе инициализации вы обрабатываете ее, как если бы это был список смежности, тогда вы пытаетесь получить к ней доступ, как если бы это была матрица смежности. Очевидно, это никогда не сработает …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]