Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。
初始时,S中仅含有源。设u是G的某一个顶点,把从源到u且中间只经过S中顶点的路称为从源到u的特殊路径,并用数组dist记录当前每个顶点所对应的最短特殊路径长度。Dijkstra算法每次从V-S中取出具有最短特殊路长度的顶点u,将u添加到S中,同时对数组dist作必要的修改。一旦S包含了所有V中顶点,dist就记录了从源到所有其它顶点之间的最短路径长度。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConAppDijkstra
{
class Program
{
private const int MaxSize = 6;
private const int INF = 32767; // INF表示∞
private const int MAXV = 4; // 最大顶点个数
// 结构体的成员定义里不能直接赋值,也就是等号后的应该移除,在你后面实例化整个结构体以后,
// 再对Study_Data[n].input=new double[50] 其他成员类似。顺便说下其实用class简单得多。
struct VertexType
{
public string VexNo; // 顶点编号
public string VexName; // 顶点名称
public string otherInfo; // 顶点其他信息
} ; // 顶点类型
struct MGraph // 图的定义
{
public int[,] edges; // 邻接矩阵
public int n, e; // 顶点数,弧数
public VertexType[] vexs; // 存放顶点信息
} ; // 图的邻接矩阵类型
static void Ppath( int[] path, int i, int v) // 前向递归查找路径上的顶点
{
int k;
using System.Linq;
using System.Text;
namespace ConAppDijkstra
{
class Program
{
private const int MaxSize = 6;
private const int INF = 32767; // INF表示∞
private const int MAXV = 4; // 最大顶点个数
// 结构体的成员定义里不能直接赋值,也就是等号后的应该移除,在你后面实例化整个结构体以后,
// 再对Study_Data[n].input=new double[50] 其他成员类似。顺便说下其实用class简单得多。
struct VertexType
{
public string VexNo; // 顶点编号
public string VexName; // 顶点名称
public string otherInfo; // 顶点其他信息
} ; // 顶点类型
struct MGraph // 图的定义
{
public int[,] edges; // 邻接矩阵
public int n, e; // 顶点数,弧数
public VertexType[] vexs; // 存放顶点信息
} ; // 图的邻接矩阵类型
static void Ppath( int[] path, int i, int v) // 前向递归查找路径上的顶点
{
int k;