# Dijkstra算法C#实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Dijkstra算法
{
public enum zm
{
A = 0,
B = 1,
C = 2,
D = 3,
E = 4,
F = 5
}
struct MGraph
{
public int[,] edges;
public int n, e;
}
//S集合
public class Sset
{
public List<int> list;
public Dictionary<string, int> dic;
public Sset()
{
list = new List<int>();
dic = new Dictionary<string, int>();
}
}
public class GraphClass
{
const int MAXV = 100;
const int INF = 32767;
MGraph g = new MGraph();
private Sset sset = new Sset();//s集合
private List<int> uList = new List<int>();//u集合
public GraphClass()
{
g.edges = new int[MAXV, MAXV];
}
/// <summary>
/// 创建图的矩阵
/// </summary>
/// <param name="n">顶点数</param>
/// <param name="e">边数</param>
/// <param name="a">图的矩阵存储</param>
public void CreateMGraph(int n, int e, int[,] a)
{
g.n = n;
g.e = e;
for (int i = 0; i < g.n; i++)
{
for (int j = 0; j < g.n; j++)
{
g.edges[i, j] = a[i, j];
}
}
}
/// <summary>
/// 图的矩阵输出
/// </summary>
/// <returns></returns>
public string DispMGraph()
{
string mystr = string.Empty;
for (int i = 0; i < g.n; i++)
{
if (i == 0)
{
mystr += "   A   B   C   D   E   F\r\n";
}
for (int j = 0; j < g.n; j++)
{
if (j == 0)
{
mystr += (zm)i + "  ";
}
mystr += string.Format("{0,-4}", g.edges[i, j].ToString());
}
mystr += "\r\n";
}
return mystr;
}
/// <summary>
/// Dijkstra算法
/// </summary>
public void Dijkstra()
{
int max = 100000;
int uListPostion = 0;
string path = string.Empty;
while (uList.Count > 1)
{
foreach (KeyValuePair<string, int> item in sset.dic)
{
string[] temp = item.Key.Split('-');
int last = Convert.ToInt32(temp[temp.Length - 1]);
for (int i = 0; i < uList.Count; i++)
{
if (!temp.Contains(uList[i].ToString()))
{
if (g.edges[last, uList[i]] != -1 && g.edges[last, uList[i]] != 0 && (g.edges[last, uList[i]] + item.Value) < max)
{
max = g.edges[last, uList[i]];
uListPostion = i;
path = item.Key;
}
}
}
}
sset.dic.Add(path + "-" + uList[uListPostion], max + sset.dic[path]);
uList.Remove(uList[uListPostion]);
max = 100000;
}
//输出路线和相应的距离
foreach (KeyValuePair<string, int> item in sset.dic)
{
string[] temp = item.Key.Split('-');
string consolestring = "";
foreach (string itemstr in temp)
{
consolestring += (zm)(Convert.ToInt32(itemstr)) + "-";
}
consolestring = consolestring.Remove(consolestring.LastIndexOf('-'));
Console.WriteLine(consolestring + "  距离：" + item.Value);
}
}
}
class Program
{
static void Main(string[] args)
{
int n = 6, en = 9;
//-1表示不可达
int[,] a = new int[,] { { 0, 6, 3, -1, -1, -1 }, { 6, 0, 2, 5, -1, -1 }, { 3, 2, 0, 3, 4, -1 }, { -1, 5, 3, 0, 2, 3 }, { -1, -1, 4, 2, 0, 5 }, { -1, -1, -1, 3, 5, 0 } };
GraphClass gc = new GraphClass();
gc.CreateMGraph(n, en, a);
Console.WriteLine(gc.DispMGraph());
gc.Dijkstra();
}
}
}
• 本文已收录于以下专栏：

## Dijkstra 最短路径算法C#实现

• chaihuo
• 2007年10月29日 09:04
• 8710

## Dijkstra算法——C#实现版

Dijkstra算法的概念不再叙述，在这里把算法的实现记录一下。 主要用于求源点到各点的最短路径。 using System.Text; using System.Collections; using...
• u012102306
• 2015年01月28日 02:57
• 1094

## C# 最短路径 Dijkstra算法实现示例

• 2015年11月28日 10:54
• 59KB
• 下载

## 单源最短路径Dijkstra算法 C#

• lab2013
• 2011年10月03日 21:13
• 1853

## 导航图寻路（三）--Dijkstra代码实现

• qq_22984991
• 2017年01月17日 16:54
• 304

## 迪杰斯特拉算法C语言实现

• 2011年11月23日 09:23
• 3KB
• 下载

## 最短路径迪杰斯特拉算法C语言实现__Dijkstra

// 采用邻接矩阵表示图 // 简单起见，邻接矩阵（图中各结点间的距离权值）在main函数中直接输入了 #include #incl...
• ppalive_
• 2015年08月19日 18:39
• 5766

## 利用优先队列实现的dijkstra算法

dijkstra算法是典型的贪心算法，但如果没有好的数据结构支持的话，O（v^2）的效率还是让人有点不满意，不过如果利用优先队列的话就能轻松的实现O(ElogV+VlogV),对       于稀疏图...
• u013708970
• 2014年03月15日 20:38
• 1722

## dijkstra算法java实现

• a1057664619
• 2016年07月18日 18:49
• 1429

## Dijkstra算法求最短路径问题完整C代码

• u014488381
• 2014年11月26日 09:31
• 10586

举报原因： 您举报文章：Dijkstra算法C#实现 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)