最小生成树Prim算法
来源:互联网 发布:小企业的会计软件 编辑:程序博客网 时间:2024/06/07 01:29
#define MAX 1<<20#define M 1005int lowcost[M];//当前生成树u的集合到其他各顶点的边最短的集合//lowcost初始为出发点到其他点的距离,不断更新为二叉树int vis[M];//标记节点是否进入生成树,1为进入,0为无struct stu{ int N;//顶点个数 int e;//边的个数 int map[M][M];//基础输入};void init(stu R)//初始化数组{ for(int i=0;i<R.N;i++) { for(int j=0;j<R.N;j++) { R.map[i][j]=0; } }}void prim(stu R,int v)//v为出发点,此处的prim算法类似于打表{ for(int i=0;i<R.N;i++) { lowcost[i]=R.map[v][i];//记录起点v距离其他点的距离 vis[i]=0;//初始化所有的点都没有进入二叉树 } vis[v]=1;//很明显v进入二叉树,所以进行标记 int sum=0;//记录最短路长度,最短路数据存在lowlost数组里 int k; int min; for(int i=0;i<R.N;i++) { min=MAX;//初始为最大值 for(int j=0;j<R.N;j++) { if(vis[j]==0&&lowcost[j]<min) { min=lowcost[j]; k=j; } }//不断循环,知道发现与v相连的最小边,计入最短路 vis[k]=1; v=k;//此时将v更新为k,查找k的最近边 sum+=min; /*开始更新lowcost的数值,如果vis[j]==0; 说明已经在此之前已经两个顶点已经联通, 所以只遍历与出发点同属并查集但并未初始相连的点*/ for(int j=0;j<R.N;j++) { if(vis[j]==0&&R.map[v][j]<lowcost[j])/*此处v已经更新为新的节点 所以将其关联点距离与出发点距离各顶点做对比*/ { lowcost[j]=R.map[v][j]; } } }}
阅读全文
0 0
- Prim最小生成树算法
- 最小生成树Prim算法
- 最小生成树Prim算法
- 最小生成树----Prim算法
- 最小生成树Prim算法
- Prim 最小生成树算法
- 最小生成树:Prim算法
- Prim算法 ----最小生成树
- 最小生成树-prim 算法
- 最小生成树(prim算法)
- 最小生成树 prim算法
- 最小生成树 prim算法
- Prim最小生成树算法
- 最小生成树prim算法
- 最小生成树--prim算法
- 最小生成树Prim算法
- 最小生成树(Prim算法)
- 最小生成树----Prim算法
- 今年多少岁
- JAVA学习47_在Eclipse下,出现“找不到或无法加载主类 ”的问题的解决方式
- Maven学习详解(10)——Maven常用命令大全与pom文件讲解
- 普通APP如何使得系统休眠
- 深度神经网络在图像识别应用中的演化【笔记】
- 最小生成树Prim算法
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- 僵尸进程和孤儿进程
- js 正则验证手机号
- [Pandas] 10分钟Pandas之旅 01
- 感染病毒WannaCry? 信息安全有华胜信泰
- 错误:argument of type "char *" is incompatible with parameter of type "LPCWSTR"
- 关于 MYSQL5.6 版本 my.ini 文件的位置
- Ubuntu linux 快速入门