Prim算法和Dijkstra算法的异同

之前一直觉得Prim和Dijkstra很相似,但是没有仔细对比;

今天看了下,主要有以下几点:

1:

Prim是计算最小生成树的算法,比如为N个村庄修路,怎么修花销最少。

Dijkstra是计算最短路径的算法,比如从a村庄走到其他任意村庄的距离。

2:

Prim算法中有一个统计总len的变量,每次都要把到下一点的距离加到len中;

Dijkstra算法中却没有,只需要把到下一点的距离加到dist数组中即可;

3:

Prim算法的更新操作更新的dist是已访问集合到未访问集合中各点的距离;

 for (j=;j<n;j++)
{
if (!visited[j] && map[j][pos]<dist[j])//更新条件:j点未访问,加入新点后已访问集合到j的距离变小了
{
dist[j] = map[j][pos];
}
}

Dijkstra算法的更新操作更新的dist是源点到未访问集合中各点的距离,已经访问过的相当于已经找到源点到它的最短距离了;

 for (j=;j<=n;j++)
{
if(!visited[j]&&&&(dist[u]+map[u][j])<dist[j])//更新条件:j点未访问,新点与j点之间有路,
dist[j]=dist[u]+map[u][j];//u为寻找的下一个节点
}

Prim算法:

 memset(visited,,sizeof(visited));//初始化
visited[] = ;
len = ;
for (i=;i<n;i++)
dist[i] = map[][i];//Begin
for (i=;i<n;i++)
{
//找到下一条符合条件的点
min = MAX;
for (j=;j<n;j++)
{
if (!visited[j] && dist[j]<min)
{
min = dist[j];
pos = j;
}
}
//访问找到的那个点
len += min;
visited[pos] = ;
//更新邻接距离
for (j=;j<n;j++)
{
if (!visited[j] && map[pos][j]<dist[j])
{
dist[j] = map[pos][j];
}
}
}

Dijkstra算法:

 void Dijkstra(int v)
{
int i,j,min,u;
for(i=;i<=n;i++)
dist[i]=map[v][i];
memset(vis,,sizeof(vis));
vis[v]=;
for (i=;i<n;i++)
{
min=MAX;
u=v;
for (j=;j<=n;j++)
{
if(!vis[j]&&dist[j]<min)
{
u=j;
min=dist[j];
}
}
vis[u]=;
for (j=;j<=n;j++)
{
if(!vis[j]&&(dist[u]+map[u][j])<dist[j])
dist[j]=dist[u]+map[u][j];
}
}
}

Prim算法和Dijkstra算法的异同的更多相关文章

  1. 编程实现prim算法和Dijkstra算法。

    网址链接:http://blog.csdn.net/anialy/article/details/7603170

  2. 最小生成树——Prim算法和Kruskal算法

    洛谷P3366 最小生成树板子题 这篇博客介绍两个算法:Prim算法和Kruskal算法,两个算法各有优劣 一般来说当图比较稀疏的时候,Kruskal算法比较快 而当图很密集,Prim算法就大显身手了 ...

  3. 最小生成树---Prim算法和Kruskal算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

  4. 转载:最小生成树-Prim算法和Kruskal算法

    本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ...

  5. 最小生成树之Prim算法和Kruskal算法

    最小生成树算法 一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 ...

  6. java实现最小生成树的prim算法和kruskal算法

    在边赋权图中,权值总和最小的生成树称为最小生成树.构造最小生成树有两种算法,分别是prim算法和kruskal算法.在边赋权图中,如下图所示: 在上述赋权图中,可以看到图的顶点编号和顶点之间邻接边的权 ...

  7. 最小生成树Prim算法和Kruskal算法

    Prim算法(使用visited数组实现) Prim算法求最小生成树的时候和边数无关,和顶点树有关,所以适合求解稠密网的最小生成树. Prim算法的步骤包括: 1. 将一个图分为两部分,一部分归为点集 ...

  8. Prim算法和Kruskal算法

       Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...

  9. prim 算法和 kruskal算法

    Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (gra ...

随机推荐

  1. javascript实现继承的4种方法,以及它们的优缺点

    1. 原型链继承(有缺陷): 缺陷1:切断了Zi.prototype.constructor与Zi的关系 缺陷2:原型链上的引用类型的数据会被所有实例共享 2. 构造函数继承(有缺陷): 缺陷1:Fu ...

  2. ASP.NET MVC应用程序中支持用户使用腾讯QQ和微信以及新浪微博的第三方登录

    什么是第三方授权登录,就是一些大家都会有的帐号如QQ.微信.淘宝.微博等账户.通过那些巨头公司提供的api直接实现登录. 当然,我们是不可能得到你的用户名和密码的.不了解的人,可能会存在这个疑虑.我们 ...

  3. windows 中常用的 cmd 命令汇总

    查看系统基本信息: cmd -> systeminfo 或 run -> dxdiag 查询主板出厂日期: cmd -> wmic bios get releasedate 关闭本地 ...

  4. 构建一个.net的干货类库,以便于快速的开发 - 加密

    在开发程序的时候,加密是一个程序一个必须的功能,基本上任何程序都会用到加密,而不同的加密方式又适应不同需求,有些加密是不可逆的,最常见是用于用户密码的加密,因为很多时候程序里面不该显示出用户的明文密码 ...

  5. Android 简单的语音播报

    不解释快上车 Main.class package com.example.myapp; import android.app.AlertDialog;import android.os.Bundle ...

  6. git Eclipse项目不显示当前分支

    问题: 在Eclipse中,导入新的git项目,在项目上不再显示当前所处的分支,也不再显示修改了哪些文件 解决: 右键选中项目  -->  Team  -->  Share Project ...

  7. NX自动出图 发布啦

    经过4个月的努力,终于面世啦!!!!1.安装文件 :http://yunpan.cn/Q49TWSJmy2i5Z    请下载后,按照“安装说明.txt ”进行安装!2.学习视频:http://yun ...

  8. 5步上手体验kettle快捷调度方式

    https://my.oschina.net/u/944575/blog/1557410 kettle调度监控最佳实践 https://my.oschina.net/u/1026947/blog/15 ...

  9. 再谈布局之 UIStackView

    UIStackView 是 iOS9 新增的一个布局技术.熟练掌握相当节省布局时间. UIStackView 是 UIView 的子类,是用来约束子控件的一个控件.但他的作用仅限于此,他不能被渲染(即 ...

  10. SpringBoot项目的mybatis逆向工程

    <dependencies> <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot& ...