【数据结构】Dijkstra求最短路径的图的邻接矩阵的实现
2017-10-17 20:59
162 查看
这个早就写好了,但是实验室的网CSDN有时候登不上去。就一直忘记了。现在补上。
其实就算一个贪心算法吧,看了很多资料,然后在自己之前写的邻接矩阵类中写,编译试了一下好像没出什么问题。代码如下,关于邻接矩阵的构造请参考之前的代码。
void Map::Dijkstra(int i)
{
//访问设置归0
cleanVisited();
//初始化数据结构
int *dv = new int[VertexNum];
int *pv = new int[VertexNum];
for (int i = 0; i < VertexNum; i++)
{
dv[i] = MAX_Weight;
pv[i] = 0;
}
dv[i] = 0;
int current_vertex = i;
while (notfinished())
{
//已经访问了当前点
visited[current_vertex] = true;
int ps = dv[current_vertex];
for (int j = 0; j < VertexNum; j++)
{
if (j != current_vertex&&visited[j] == false)
{
//算长度
int ds = ps + Edges[current_vertex][j];
if (ds < dv[j])
{
dv[j] = ds;
pv[j] = current_vertex;
}
}
}
int min = MAX_Weight;
for (int m = 0; m < VertexNum; m++)
{
if (visited[m] == false&&min>dv[m])
{
min = dv[m];
current_vertex = m;
}
}
}
}
其实就算一个贪心算法吧,看了很多资料,然后在自己之前写的邻接矩阵类中写,编译试了一下好像没出什么问题。代码如下,关于邻接矩阵的构造请参考之前的代码。
void Map::Dijkstra(int i)
{
//访问设置归0
cleanVisited();
//初始化数据结构
int *dv = new int[VertexNum];
int *pv = new int[VertexNum];
for (int i = 0; i < VertexNum; i++)
{
dv[i] = MAX_Weight;
pv[i] = 0;
}
dv[i] = 0;
int current_vertex = i;
while (notfinished())
{
//已经访问了当前点
visited[current_vertex] = true;
int ps = dv[current_vertex];
for (int j = 0; j < VertexNum; j++)
{
if (j != current_vertex&&visited[j] == false)
{
//算长度
int ds = ps + Edges[current_vertex][j];
if (ds < dv[j])
{
dv[j] = ds;
pv[j] = current_vertex;
}
}
}
int min = MAX_Weight;
for (int m = 0; m < VertexNum; m++)
{
if (visited[m] == false&&min>dv[m])
{
min = dv[m];
current_vertex = m;
}
}
}
}
相关文章推荐
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径
- 数据结构之有向网邻接矩阵Dijkstra实现源点至其余各顶点最短路径
- 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径
- 图的邻接矩阵表示与最短路径算法( Dijkstra )代码实现
- 数据结构:最短路径(Dijkstra c++实现)
- hdu 2544 单源最短路径(邻接矩阵Dijkstra实现)
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)及其他 + leetcode习题实践
- 最短路径(二)—Dijkstra算法(通过边实现松弛:邻接矩阵)
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- Matalab代码 实现 Dijkstra求 有向图及无向图之间,任意两点之间的最短路径
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- 数据结构之最短路径(DijKstra)
- PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
- hdu3790 最短路径问题(dijkstra/优先队列实现)
- 图(有向图,无向图)的邻接矩阵表示C++实现(遍历,拓扑排序,最短路径,最小生成树) Implement of digraph and undigraph using adjacency matrix
- dijkstra最短路径算法C实现