Mierzenie odległości między węzłami C++

0

Witam
Muszę napisać program który zmierzy najkrótszą odległość między 1 i ostatnim węzłem. Dane na temat dróg między węzłami są opisane w pliku. Do wykonania tego programu chciałbym użyć rekurencję. A o to kod który udało mi się nadziergać takie cuś

 #include <conio.h>
#include <stdio.h>
#include <stdlib.h>
FILE *plik;
int i,j,o,p,a,b,c,tab[10][10],nr[10],ab[10];

//---------------------------------------------------------------------------
void wyb(int k,int sum)
 {
   int suma;
   a=0;
   for(i=1;i<=p-1;i++)
     if (tab[k][i]!=0)
      {
    a++;
    nr[a]=i;
      }
   for (j=1;j<=a;j++)
     {
       suma=sum+tab[k][nr[i]];
       if (k==p)
     {
      ab[b]=suma;
      b++;
     } else
     {
      wyb(k+1,suma);
     }
     }

 }

int main()
{
    clrscr();
    plik=fopen("dane.txt","r");
    fscanf(plik,"%d %d",&o,&p);
    for(i=1;i<=o;i++)
      {
        fscanf(plik,"%d %d %d",&a,&b,&c);
        tab[a][b]=c;
      }
    b=0;
    wyb(1,0);
    fclose(plik);
    for(i=0;i<=b;i++)
      printf("%d ",ab[i]);
    getch();
    return 0;
}

Wydaje mi się że program działa w miarę poprawnie ale wykonuje za wcześnie wyskakuje z rekurencji i nie wpisuje wyników sumowania do tablicy ab, z której zostanie wyciągnięta najmniejsza wartość.

P.S.
Przykład pliku z danymi
1 linia : liczba relacji, liczba węzłów
pozostałe linie: numer węzłów, numer węzła, odległość między nimi;

6 5
1 2 10
1 3 5
2 3 15
2 5 20
3 4 15
4 5 5
0
  1. Tagi <cpp>
  2. Algorytm szukania najkrótszych ścieżek w grafie z jednym źródłem, czyli Algorytm Dijkstry, lub (jeśli zakładasz możliwosć ujemnych wartości krawędzi i ujemnych cykli) to Algorytm Bellamana-Forda (on zasygnalizuje że występuje ujemny cykl uniemożliwiający wyznaczenie długości ścieżek).</cpp>

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0