Witam!
Robię sobie zadanko Dostawca:
http://informatyka.wroc.pl/node/406?page=0,4
Mój kod:
#include <iostream>
#include <algorithm>
#include <vector>
#define INF 1000000000
#define N 1002
using namespace std;
vector <int> kraw[N];
vector <int> waga[N];
bool vis[N];
bool dis[N];
int bellman_ford(int a, int b, int uuu)
{
for(int i=1; i<=uuu; i++)
dis[i] = INF;
dis[a] = 0;
for(int q=1; q<=uuu-1; q++)
{
for(int v=1; v<=uuu; v++)
{
for(int i=1; i<kraw[v].size(); i++)
{
int w = kraw[v][i];
int k = waga[v][i];
if(dis[v] > dis[w] + k)
dis[v] = dis[w] + k;
}
}
}
return dis[b];
}
int main()
{
int v, e, a, b, c, t, g, h;
int tab[100];
cin >> v >> e;
for(int i=0; i<e; i++)
{
cin >> a >> b >> c;
kraw[a].push_back(b);
kraw[b].push_back(a);
waga[a].push_back(c);
}
cin >> t;
for(int i=0; i<t; i++)
{
cin >> g >> h;
tab[i] = bellman_ford(g, h, e);
}
for(int i=0; i<t; i++)
cout << tab[i] << "\n";
return 0;
}
Użyłem bellmana forda, bo jest prostszy w implementacji, a złożoność nie jest aż tyle gorsza. Tylko, że mój kod nie działa - po wprowadzeniu danych coś tam chwilę liczy, po czym się wywala.
Prosze o powiedzenie co jest źle, bo mało jest na ten temat w necie, a koniecznie muszę znać jakiś algorytm znajdujący najkrotsza droge miedzy jednym wierzcholkiem a wszystkimi pozostalymi (floyda warshalla juz znam).