algorytm.org

Implementacja w Java

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 Floyda - Implementacja w Java
Ocena użytkownikóww: *****  / 5
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 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.

Floyd.java:
/**
 * (c)2005 Tomasz Lubinski
 * www.algorytm.org
 * algorytm Floyda - minimalne odleglosci miedzy wierzcholkami
 * w grafie, domkniecie zwrotne
 * 
 */
public class Floyd {

	private static Macierz A[][];
	public static void main(String[] args) {
		
		int i,j,k,n;
		String tmp;

		System.out.println("Podaj liczbe wierzcholkow");
		n = Console.readInt("?");
		A = new Macierz[n][];
		for (i=0; i<n; i++) {
			A[i] = new Macierz[n];
			for (j=0; j<n; j++) {
				A[i][j] = new Macierz();
			}
		}
		System.out.println("Podaj wartosci macierzy odleglosci A");
		System.out.println("Gdy miedzy wierzcholkami nie ma polaczenia wpisz niesk");

		//wczytanie od uzytkownika odleglosci
		for (i=0; i<n; i++)
			for (j=0; j<n; j++) {
				if (i==j) {
					A[i][j].odl=0; 
					A[i][j].droga=1; 
					continue;
				}
				tmp = Console.readString("A["+ i + ", "+ j + "]");
				if (tmp.compareTo("niesk") != 0) {
					A[i][j].odl = Integer.parseInt(tmp);
					A[i][j].droga=1;
				}
				else {
					A[i][j].odl=0;
					A[i][j].droga=0;
				}
			}
		
		//algorytm Floyda
		for (k=0; k<n; k++)
			for (i=0; i<n; i++)
				for (j=0; j<n; j++) {
					if((A[i][k].droga==1)&&(A[k][j].droga==1)) {
						if (A[i][j].droga==0)
							A[i][j].odl=A[i][k].odl+A[k][j].odl; //jesli droga i,j nie istnieje to musi to byc suma drog i,k+k,j
						else
							A[i][j].odl=Math.min(A[i][j].odl, A[i][k].odl+A[k][j].odl); //jesli istnieje to wybierz minimum z drog i,j oraz i,k+k,j
						A[i][j].droga=1;
					}
				}
		
		//wypisanie wynikow
		for (i=0; i<n; i++)	{
			System.out.println("");
			for (j=0; j<n; j++)
				if (A[i][j].droga==0)
					System.out.print(" D["+i+", "+j+"]=niesk.  "); 
				else
					System.out.print(" D["+i+", "+j+"]=" + A[i][j].odl);
		} 		
	}
}
Dodaj komentarz