最短路徑之Floyd演算法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 最短路徑之Floyd演算法
{
class Program
{
public static readonly int M = 999999;//表示不可到達距離
static int[,] map = new int[,] {
{ 0, 6, 3, M,M,M },
{ 6, 0, 2, 5,M,M },
{ 3, 2, 0, 3, 4, M },
{ M, 5, 3, 0, 2, 3 },
{ M,M, 4, 2, 0, 5 },
{ M,M,M, 3, 5, 0 }
};//路徑圖
static int places = (int)Math.Sqrt(map.Length);//獲取地點數;
static int[,] path = new int[places, places];//路徑
static void Main(string[] args)
{
Console.WriteLine("原路徑圖:");
DisplayMap();
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("計算後的路徑圖:");
floyd_alg();
DisplayMap();
Console.WriteLine();
Console.WriteLine();
displayResult();
Console.ReadKey();
}
/// <summary>
/// 表示A-E六個地點
/// </summary>
public enum Place
{
A = 0,
B = 1,
C = 2,
D = 3,
E = 4,
F = 5
}
/// <summary>
/// 將原矩陣顯示
/// </summary>
public static void DisplayMap()
{
Console.Write(" ");
for (int i = 0; i < places; i++)
{
Console.Write((Place)i + " ");
}
Console.Write("\r\n");
for (int i = 0; i < places; i++)
{
Console.Write((Place)i + " ");
for (int j = 0; j < places; j++)
{
if (map[i, j] == M)
Console.Write("M ");
else if (map[i, j] < 0)
Console.Write(map[i, j] + " ");
else
Console.Write(map[i, j] + " ");
}
Console.Write("\r\n");
}
}
/// <summary>
/// Flody演算法
/// </summary>
public static void floyd_alg()
{
//初始化路徑
for (int i = 0; i < places; i++)
for (int j = 0; j < places; j++)
path[i, j] = -1;
for (int k = 0; k < places; k++)
for (int i = 0; i < places; i++)
for (int j = 0; j < places; j++)
if (map[i, j] > (map[i, k] + map[k, j]))
{
map[i, j] = map[i, k] + map[k, j];
path[i, j] = k;
}
}
/// <summary>
/// 輸出路徑和距離
/// </summary>
public static void displayResult()
{
for (int i = 0; i < places; i++)
{
string str = ((Place)i).ToString();
int k = path[0, i];
while (k != -1)
{
str = (Place)k + "-" + str;
k = path[i, k];
}
Console.WriteLine((Place)0 + "-" + str + ";最短距離為:" + map[0, i]);
}
}
}
}
相關文章
- 最短路徑(Floyd演算法)演算法
- [MATLAB]最短路徑Floyd演算法Matlab演算法
- Floyd演算法(計算最短路徑)演算法
- 求最短路徑——DFS+Floyd演算法演算法
- 最短路徑——Dijkstra演算法和Floyd演算法演算法
- 多源最短路徑演算法:Floyd演算法演算法
- 最短路徑(dijkstra 與 Floyd)
- 最短路演算法之:floyd 演算法演算法
- 最短路徑——floyd演算法程式碼(c語言)演算法C語言
- 圖的最短路徑(Dijkstra | Floyd)
- 多源最短路徑,一文搞懂Floyd演算法演算法
- Floyd最短路演算法演算法
- 最短路徑--dijkstra演算法、弗洛伊德(Floyd)演算法(帶路徑輸出)演算法
- 最短路徑之Dijkstra演算法演算法
- 最短路-SPFA演算法&Floyd演算法演算法
- 最短路-Floyd
- 【最短路徑Floyd演算法詳解推導過程】看完這篇,你還能不懂Floyd演算法?還不會?演算法
- 最短路徑演算法演算法
- distance(Floyd求最短路)
- Djikstra最短路徑演算法演算法
- 最短路徑(Dijskra演算法)JS演算法
- python實現Dijkstra演算法之 最短路徑問題Python演算法
- 最短路徑演算法總結演算法
- 演算法與資料結構之-圖的最短路徑演算法資料結構
- 最短路徑問題 (dijkstra演算法)演算法
- 幾個最短路徑的演算法演算法
- 單源最短路徑-Dijkstra演算法演算法
- 0016:單源最短路徑(dijkstra演算法)演算法
- 圖的最短路徑演算法彙總演算法
- Floyd演算法之個人見解演算法
- 6.4.2最短路徑
- 圖 - 最短路徑
- [最短路徑問題]Dijkstra演算法(含還原具體路徑)演算法
- 單源最短路徑:最短路徑性質的證明
- 7-1 最短路徑之Dijkstra (10分)
- 路徑規劃演算法 - 求解最短路徑 - Dijkstra(迪傑斯特拉)演算法演算法
- 使用A*演算法解迷宮最短路徑問題演算法
- 最短路徑—Dijkstra(迪傑斯特拉)演算法演算法