算法之路1_Prime

Prime算法的3中模板

Prime算法的基本思想

1.清空生成树,任取一个顶点加入生成树

2.在那些一个端点在生成树里,另一个端点不在生成树里的边中,选取一条权最小的边,将它和另一个端点加进生成树

3.重复步骤2,直到所有的顶点都进入了生成树为止,此时的生成树就是最小生成树

1.  Prime不带参数void Prime (),默认从图顶点1开始

void prime()

{

int mincost, index, sum = 0;

for (int i = 0; i < n; i++)

{

dist[i] = graph[0][i];

visit[i] = 0;

}

// visit[0]=1;

for (int i = 0; i < n; i++)

{

mincost = inf;

for (int j = 0; j<n; j++)

{

if (visit[j] == 0 && dist[j] < mincost)

{

index = j;

mincost = dist[j];

}

}

visit[index] = 1;

sum += mincost;

for (int j = 0; j < n; j++)

{

if (visit[j] == 0 && dist[j] > graph[index][j])

dist[j] = graph[index][j];

}

}

printf("%d\n", sum);

}

2.  Prime带一个参数int prime(int cur),参数是图的顶点个数

int prime(int cur)

{

int index;

int sum = 0;

memset(visit, false, sizeof(visit));

visit[cur] = true;

for(int i = 0; i <n; i ++){

dist[i] = graph[cur][i];

}

for(int i = 1; i < n; i ++){

int mincost = INF;

for(int j = 0; j < n; j ++){

if(!visit[j] && dist[j] < mincost){

mincost = dist[j];

index = j;

}

}

visit[index] = true;

sum += mincost;

for(int j = 0; j < m; j ++){

if(!visit[j] && dist[j] > graph[index][j]){

dist[j] = graph[index][j];

}

}

}

return sum;

}

3.  Prime带两个参数,int prime(int cost[][101],int num), 参数是图的顶点个数和图的二维邻接矩阵

int prime(int data[][105],int num)

{

int mincost,index,sum=0;

for(int i=0;i<num;i++)

{

dist[i]=graph[0][i];

visit[i]=0;

}

visit[0]=1;

for(int i=1;i<num;i++)

{

mincost=inf;

for(int j=0;j<num;j++)

if(!visit[j]&&dist[j]<mincost)

{

mincost=dist[j];

index=j;

}

visit[index]=1;

sum+=mincost;

for(int j=0;j<num;j++)

if(visit[j]==0&&dist[j]>graph[index][j])

dist[j]=graph[index][j];

}

return sum;

}

时间: 2024-10-10 21:51:26

算法之路1_Prime的相关文章

[1] 算法之路 - 选择排序

选择排序 – 算法 1. 将要排序的对象分作2部份,一个是已排序的,一个是未排序的 2.  从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个 e.g: 排序前:70 80 31 37 10 1 48 60 33 80 [1] 80 31 37 10 7048 60 33 80 选出最小值1 [1 10] 31 37 80 7048 60 33 80 选出最小值10 [1 10 31] 37 80 7048 60 33 80 选出最小值31 [1 10 31 33] 80 7048

[2] 算法之路 - 选择之堆排序

题目: 选择排序法的概念简单,每次从未排序部份选一最小值,插入已排序部份的后端,其时间主要花费于在整个未排序部份寻找最小值,如果能让搜寻最小值的方式加 快,选择排序法的速率也就可以加快 Heap排序法让搜寻的路径由树根至最后一个树叶,而不是整个未排序部份,从而可以加快排序的过程,因而称之为改良的选择排序法. 整个堆排序的过程分建堆.取值.调整为新的堆三个过程.分别如下示:(以最小堆积树为例.关于HeapTree请参阅数据结构与算法) 建堆 - 算法 1.  加至堆积树的元素会先放置在最后一个树叶

[3] 算法之路 - 插入排序

插入排序 – 算法 1.将排序部分分成两部分 2.每次从后面部分取最前面的数插入到前面部分的适当位置 该处提供两个插入排序版本,指定间隔插入与插入排序.后面对指定间隔排序提到Shell排序中的n/2间隔与Sedgewick间隔 例如: 排序前:92 77 67 8 6 84 55 85 43 67 [77 92] 67 8 6 8455 85 43 67 将77插入92前 [67 77 92] 8 6 8455 85 43 67 将67插入77前 [8 67 77 92] 6 8455 85 4

[4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔

题目 插入排序法由未排序的后半部前端取出一个值,插入已排序前半部的适当位置,概念简单但速度不快. 排序要加快的基本原则之一: 是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度,Shell排序法即是基于此一概念来改良插入排序法. 解法 Shell排序法最初是D.L Shell于1959所提出,假设要排序的元素有n个,则每次进行插入排序时并不是所有的元素同时进行时,而是取一段间隔. Shell排序算法 – n/2间隔 Shell首先将间隔设定为n/2,然后跳跃进行插入排序,再来将

[6] 算法之路 - 双向冒泡排序之Shaker

Shaker排序 –算法 1. 气泡排序的双向进行,先让气泡排序由左向右进行,再来让气泡排序由右往左进行,如此完成一次排序的动作 2. 使用left与right两个旗标来记录左右两端已排序的元素位置. 一个排序的例子如下所示: 排序前:45 19 77 81 13 28 18 1977 11 往右排序:19 45 77 13 28 18 19 7711 [81] 向左排序:[11] 19 45 77 13 28 1819 77 [81] 往右排序:[11] 19 45 13 28 18 19[7

[7] 算法之路 - 快速排序之3轴演算

左轴演算.中轴演算.右轴演算 题目: 快速排序法(quick sort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的. 快速排序 - 算法 1.快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二 2.分别对左边与右边数列进行排序 左轴演算: // 快速排序 - 左轴演算 // 1. 附设两个指针left/right,并设最左端的数为最初枢轴pivot // 2. 从右向左搜索,找

前端小白的算法之路

时隔多日终于解决了埋在心头的一道难题,霎时云开雾散,今天把一路而来碰到的疑惑和心得都记录下来,也算是开启了自己探索算法的大门. 问题背景 曾经有一个年少轻狂的职场小白,在前端圈子里摸爬滚打将近两年,本计划在js的道路上越走越远,以至于每天沉浸在js红皮书里不能自拔,突然有一天脑抽想找leader比划两下,于是出现了下面的对话,小白:leader,您最近在干嘛?手里有需要亟待解决的难题吗?leader:咦,确实有哎,咱的项目随着业务的不断发展,日均PV也越来越多,公司的两台机器已经快满足不了需求,

我的算法之路

关于 严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没有让我入门——当时自己正忙于倒卖各种MP3和耳机,对于这些课程根本就不屑一顾——反正最后考试划个重点也能过,于是这门整个计算机专业本

sql地址寻路算法(省市区路)

最近无意翻开4年前做过的一个功能,就是搜集全国各城市各个区(县)的路(XX路.XX道.XX街.XX镇.XX乡.XX屯.XX村.XX社).众所周知,我们都可以在网上找到省.市.区(县)这三级联动的数据,可是就并没有关于某个城市的某些区(县)下所对应的路(以下所有的路,道,街,镇,乡,屯,村,社统称为路)的数据,不过我们可以找到一些有地址的网站,例如大众点评网,里面就有很多一些饮食店等的具体地址.可以写个爬虫程序,把所有的详细地址先写进数据库的某个表中,然后再执行算法,把地址中有包含路.道.街.镇.