C 迪傑斯特拉演算法

2022-01-23 17:08:00 字數 1758 閱讀 9937

網上有許多版本的,自己還是寫乙個理解點

dijkstra.cs

public class dijkstra

public void initweights(list> weights)

public listfind(string start, string end)

var s = _nodes.where(x => x.name == start).tolist();

var u = _nodes.where(x => x.name != start).tolist();

s.foreach(x =>

);u.foreach(x =>

);while (u.any())

}});

//找出距離最小的

var minnode = u.orderby(x => x.weight).firstordefault();

s.add(minnode);

u.remove(minnode);

}var paths = new stack();

while (endnode != null)

//如果路勁中包含起點

if (paths.tolist().contains(start))

else

}private edge getedgebytwonode(node start, node end)

return edge;

} /// /// 將權值轉換成邊

///

///

private listconverttoedge(list> weights)

);});

return edges;

} /// /// 根據名字獲取節點

///

///

///

private node getnodebyname(string nodename)

/// /// 初始化點

///

private void initnodes());}

if (_nodes.all(x => x.name != weight.end)));}

});} }

edge.cs

//表示一條邊,從start到end的權值為多少

internal class edge

public string end

public double weight

}

node.cs

internal class node

public node parent

/// /// 該節點到起點的最短距離

///

public double weight

public double getallweight()

while (node != null);

return allweight;

} }

使用如下

static void main(string args)

; var dij = new dijkstra();

dij.initweights(weights);

var path = dij.find("d", "g");

path.foreach(console.writeline);

}

迪傑斯特拉演算法

if object id t test is not null drop table t test gocreate table dbo t test id int identity 1,1 not null primary key,自增字段,無意義 header varchar 500 第一點的名...

迪傑斯特拉演算法

dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...

迪傑斯特拉演算法

迪傑斯特拉演算法用來計算圖中某一點到其他點的最短距離,這個圖可以是加權,也可以是無權的,距離指的是從一點到其它點所經過的邊的權重和 假設現在有乙個加權無向圖,我們要求節點1到其他點的最短距離 初始化圖arr 用乙個鄰接矩陣來表示一張圖,矩陣元素 初始化一維向量d,這個向量儲存的是其他點的最短距離,初...