/// <summary> /// Dijkstra algorithim /// </summary> /// <param name="source"></param> /// <param name="dest"></param> /// <returns></returns> public string Dijkstra(int source, int dest) { MatrizAdj matrix = new MatrizAdj(this); string out_put = ""; int[] parent = new int[NumVertices()]; int[] dist = new int[NumVertices()]; bool[] visitado = new bool[NumVertices()]; for (int i = 0; i < NumVertices(); i++) { parent[i] = -1; dist[i] = int.MaxValue; visitado[i] = false; } dist[source] = 0; for (int count = 0; count < NumVertices() - 1; count++) { int u = min_dist(dist, visitado); visitado[u] = true; for (int v = 0; v < NumVertices(); v++) { if (!visitado[v] && matrix.get_matrix()[u, v] != 0 && dist[u] != int.MaxValue && dist[u] + matrix.get_matrix()[u, v] < dist[v]) { dist[v] = dist[u] + (int)matrix.get_matrix()[u, v]; parent[v] = u; } } } string str = str_path(dest, parent); out_put += $"Caminho mínimo do {BuscaVertice(source)} até {BuscaVertice(dest)} : {dist[dest]}"; out_put += "\nCaminho: " + str; return(out_put); }
/// <summary> /// AdjMatrix to string /// </summary> /// <returns></returns> public string MatrixListToString() { MatrizAdj = new MatrizAdj(this); return(MatrizAdj.ToString()); }