algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Algorytm Forda-Bellmana - Implementacja w C/C++
Ocena użytkownikóww: *****  / 17
SłabyŚwietny
Nadesłany przez Michał Knasiecki, 09 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

ford_c/ford_bellman.cpp:
/********************************************************************************
*                                                                    		*
*	Algorytm Forda-Bellmana wyznaczania najkrótszej ścieżki od		*
*	danego wierzcholka do wszystkich pozostalych w grafie skierowanym 	*
*  	Plik pobrany ze strony:			www.algorytm.org                *
*	Opracowal:				Michal Knasiecki		*			
*                                                                    		*
*********************************************************************************/

/*Uwaga:
graf znajduje sie w pliku graf.txt
Opis formatu pliku znajduje sie w pliku !format.txt
*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define nieskonczonosc 100000

#define MIN(a,b) (a<b)?a:b

void main(void)
{
FILE *plik;
int  	n; //liczba wierzcholkow
int  	A[100][100];
int  	D[100];
char 	s[5];
int 	i,j,k;
int	N;


if ((plik=fopen("graf.txt","r"))==NULL)
	printf("Brak pliku graf.txt!\n"); else
   	{
      fscanf(plik,"%i",&n);
      printf("Liczba wierzcholkow: %i\n",n);
		for (j=0;j<n;j++)
      for (i=0;i<n;i++)
      	{
         fscanf(plik,"%s",s);
         if (strcmp(s,"*")!=0)
         A[j][i]=atoi(s); else A[j][i]=nieskonczonosc;
         }
      fclose(plik);

      for (i=0;i<n;i++) D[i]=A[0][i];

      //Przyjmujemy, że s=1, szukamy więc najkrótszych dróg od wierzchołka 1 do pozostałych
      for (k=1;k<=n-2;k++)
      	{
         for (i=1;i<n;i++)
         	for (j=0;j<n;j++)
            	{
               if (D[j]+A[j][i]>nieskonczonosc)
               	N=nieskonczonosc; else
                  N=D[j]+A[j][i];
         		D[i]=MIN(D[i],N);
               }
         }
      	k=nieskonczonosc;
      	for (i=0;i<n;i++)
         	if (D[i]<k)
      		printf("D(%i)=%i\n",i+1,D[i]);
            else
         	printf("D(%i)=%s\n",i+1,"*");
      }
}
Komentarze
photo
-1 # Baaaaaaaartez 2013-05-14 13:18
Gdzie moge znalesc graf.txt?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # test30 2014-06-09 17:13
plik graf.txt jest na poprzedniej stronie w kolumnie "pobierz" zamiast otworz

4
* 1 2 4
1 * 2 4
1 2 * 4
1 2 4 *
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz