Я пытаюсь реализовать алгоритм Флорида в 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;
}
}
}
}}
Когда я пытаюсь выполнить код, программа выдает сообщение «Выражение: нижний индекс вектора вне диапазона»
Я надеюсь, что вы, ребята, можете мне помочь, так как я не смог решить это!
Два наиболее распространенных способа представления графика:
У вас есть одна структура данных, на этапе инициализации вы обрабатываете ее, как если бы это был список смежности, тогда вы пытаетесь получить к ней доступ, как если бы это была матрица смежности. Очевидно, это никогда не сработает …
Других решений пока нет …