Алгоритм нахождения расстояния от источника до всех остальных вершин в графе с неотрицательными весами дуг — метод Дейкстры.
Известны более эффективные алгоритмы для двух важных случаев, а именно: когда веса всех дуг неотрицательны или когда граф бесконтурный. Здесь приведен алгоритм дейктсры.
private void algDeikstra() { int s = Convert.ToInt32(textBox5.Text) - 1; //произвольная вершина графа, которая послужит началом пути int[] D = new int[n]; bool fl = true; initGraph(); //инициализация матрицы смежности initMatrixWeight(); //инициализация матрицы весов List V=new List(); if (s < 0 || s >= n) return; for (int i = 0; i < n; i++) D[i] = A[s, i]; for (int i = 0; i < n; i++) V.Add(i); D[s] = 0; int u=0, tmp; while (V.Count!=0) { u = V[0]; tmp=D[V[0]]; foreach (int i in V) { if (D[i] < tmp) { tmp = D[i]; u = i; } } V.Remove(u); foreach (int i in V) { D[i] = min(D[i], D[u] + A[u, i]); } }//while textBox7.Clear(); for (int i = 0; i < n; i++) { textBox7.Text += "Кратчайшее расстояние от V" + (s + 1) + " до V" + (i + 1) + " = " + D[i] + "\r\n"; } }//algDeikstra()
сложность алгоритма есть O(n2).