Ahojte, potreboval by som pomoc...mam zadany pocet vrcholov aj hran a suradnice jednotlivych vrcholov a dlzky hran a potrenujem vypocitat dlzku najkratsej cesty.
Mam hotove toto:
// uloha-7-2.c -- Tyzden 7 - Uloha 2
// Adam Kotvas, 2.11.2016 13:43:06
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
int pv = 0;
int pole[22000][22000];
int najdi_vzdialenost(int ciel, int od, int v, int dlzka)
{
dlzka += pole[od][v];
int i, j = 1;
for (i = v;; j++)
{
if (v == ciel) {
return dlzka;
}
if (j > pv)
{
if (i == 1 && v != od) return 0;
i = od;
j = v;
dlzka -= pole[v][od];
continue;
}
if (pole[i][j] != 0)
{
if (j == od && v != od) continue;
//dlzka = pole[i][j];
return dlzka = najdi_vzdialenost(ciel, i, j, dlzka);
}
}
}
int main()
{
int ph = 0, prvy, v, ciel, i, j, x = 0, y = 0, dlzka = 0;
scanf("%d %d %d %d", &pv, &ph, &prvy, &ciel);
/*
int **pole = (int**)malloc((pv + 1) * sizeof(int*));
for (i = 1; i <= pv; i++)
{
pole[i] = (int*)malloc((pv + 1)*(sizeof(int)));
}
for (i = 1; i <= pv; i++)
for (j = 1; j <= pv; j++)
{
pole[i][j] = 0;
}
*/
for (i = 1; i <= ph; i++)
{
scanf("%d %d %d", &x, &y, &dlzka);
pole[x][y] = dlzka;
pole[y][x] = dlzka;
}
dlzka = 0;
for (i = 1; i < pv; i++)
{
if (pole[i][ciel] == 0) continue;
else
{
printf("%d\n", najdi_vzdialenost(ciel, prvy, prvy, dlzka));
break;
}
}
if (i == pv) printf("-1");
return 0;
}
problem je ze je to prilis pomale kedze pri velkych cislach to musi prehladavat cele pole niekolkokrat a je to dost neefektivne...vedeli by ste mi poradit ako to mam upravit aby to boo casovo efektivnejsie? Idealne bez pouzitia spajanych zoznamov kedze sa v nich zrovna nevyzivam :D
Dakujem :)