網上有許多版本的,自己還是寫乙個理解點
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,這個向量儲存的是其他點的最短距離,初...