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