Anonymní profil Adam K. – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Adam K. – Programujte.comAnonymní profil Adam K. – Programujte.com

 

Příspěvky odeslané z IP adresy 195.212.29.–

Adam K.
C / C++ › Najkratsia cesta medzi vrcho…
9. 12. 2016   #214002

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 :)

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý