public void wypisz(wynik w) { if (w.dist == int.MaxValue) { Console.WriteLine("---"); } else { Console.WriteLine(w.dist + "|" + w.prev); } }
public wynik[,,] Sriednica(int[,] maczieżS, int n) //Floyd Warshall { wynik[,,] wynik = new wynik[n, n, n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (maczieżS[i, j] != 0) { wynik[i, j, 0].dist = maczieżS[i, j]; wynik[i, j, 0].prev = i; } else { wynik[i, j, 0].dist = int.MaxValue; wynik[i, j, 0].prev = -1; } } } for (int k = 1; k < n; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int c = Sprawdż(wynik[i, k, k - 1].dist, wynik[k, j, k - 1].dist); if (c < wynik[i, j, k - 1].dist) { wynik[i, j, k].dist = c; wynik[i, j, k].prev = wynik[k, j, k - 1].prev; } else { wynik[i, j, k].dist = wynik[i, j, k - 1].dist; wynik[i, j, k].prev = wynik[i, j, k - 1].prev; } } } } return(wynik); }
public wynik[,,] Sriednica(int[,] maczieżS, int n) { wynik[,,] wynik = new wynik[n, n, n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { wynik[i, j, 0].dist = int.MaxValue; if (maczieżS[i, j] != 0) { wynik[i, j, 0].dist = maczieżS[i, j]; } } } for (int k = 1; k < n; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if ((wynik[i, k, k - 1].dist + wynik[k, j, k - 1].dist) < wynik[i, j, k - 1].dist) { wynik[i, j, k].dist = (wynik[i, k, k - 1].dist + wynik[k, j, k - 1].dist); } else { wynik[i, j, k].dist = wynik[i, j, k - 1].dist; } } } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (maczieżS[i, j] != 0) { wynik[i, j, 0].dist = maczieżS[i, j]; wynik[i, j, 0].prev = i; } else { wynik[i, j, 0].dist = int.MaxValue; wynik[i, j, 0].prev = -1; } } } for (int k = 1; k < n; k++) { for (int i = 1; i < n; i++) { for (int j = 1; j < n; j++) { if ((wynik[i, k, k - 1].dist + wynik[k, j, k - 1].dist) < wynik[i, j, k - 1].dist) { wynik[i, j, k].dist = (wynik[i, k, k - 1].dist + wynik[k, j, k - 1].dist); wynik[i, j, k].prev = k; } else { wynik[i, j, k].dist = wynik[i, j, k - 1].dist; } } } } return(wynik); }
static void Main(string[] args) { Console.Write("Ile wierzchołków ma graf?\n n = "); int n = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Podaj macierz sąsiadstwa:"); int[,] macierz = new int[n, n]; for (int i = 0; i < n; i++) { string[] dane = Console.ReadLine().Split(' '); for (int j = 0; j < n; j++) { macierz[i, j] = Convert.ToInt32(dane[j]); } } //int[,] macierżS = {{ 0, 1, 1, 0 }, // { 1, 0, 1, 1 }, // { 1, 1, 0, 1 }, // { 0, 1, 1, 0 }}; //int[,] Macierżf = {{ 0, 0, 0, 3, 0}, // { 3, 0, 4, 1, 0}, // { 0,-1, 0, 2, 0}, // {-2, 5, 0, 0, 2}, // { 0, 0, 1, 0, 0} }; //int[,] MaczierzW = {{ 0, 1, 0, 2, 5, 0}, // { 1, 0, 2, 0, 5, 0}, // { 0, 2, 0, 0, 1, 4}, // { 2, 0, 0, 0, 3, 0}, // { 5, 5, 1, 3, 0, 1}, // { 0, 0, 4, 0, 1, 0} }; Graf g = new Graf(); // maks z najkrotszych pomiedzy 2 wierz wynik[,,] b = g.Sriednica(macierz, n); Console.WriteLine(); wynik a = b[0, 0, n - 1]; for (int k = 0; k < n; k++) { Console.WriteLine("[ k = {0} ]", k); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (k == (n - 1)) { if (b[i, j, k].dist > a.dist) { a = b[i, j, k]; // maks } } g.wypisz(b[i, j, k]); } Console.WriteLine(); } Console.Write("\n\n"); } Console.WriteLine("Średnica:"); g.wypisz(a); Console.ReadKey(); }