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