全球做的比较好的网站,在速卖通上具体网络营销方案,站长统计app进入网址新版小猪,苏州刚刚发生大事件算法之最小生成树
最小生成树
概念#xff1a;
最小生成树是一颗连接图G所有顶点的边构成的一颗权最小的树#xff0c;最小生成树一般是在无向图中寻找。最小生成树共有N-1条边(N为顶点数)。
算法#xff1a;
Prim算法
概念#xff1a;
Prim(普里姆)算法是生成最小生…算法之最小生成树
最小生成树
概念
最小生成树是一颗连接图G所有顶点的边构成的一颗权最小的树最小生成树一般是在无向图中寻找。最小生成树共有N-1条边(N为顶点数)。
算法
Prim算法
概念
Prim(普里姆)算法是生成最小生成树的一种算法该算法基本上和求最短路径的Dijkstra算法一样具体操作选取一个顶点作为树的根节点v1然后从这个顶点发散找到其邻接顶点(加入队列中)然后选取根节点到邻接顶点中权最小的路径(也就是连接该路径的另一个顶点)进行添加到树中(也将连接的顶点除去v1的顶点的邻接顶点加入队列中)然后初步形成一个图为u然后再按顺序的查找图u与队列中的顶点的最小路径并加入树中重复操作。最小生成树信息打印打印树中边的顶点对组。
实现代码
使用优先队列
void Prim(int v){an[v].dist0;//使用优先队列,定义参数数据类型容器类型比较方法priority_queuepairint,int,vectorpairint,int,greaterpairint,intq;//pairint,int对组的第一个为权第二个为顶点。q.push(make_pair(0,v));while (!q.empty()){int wq.top().second;q.pop();listnode* pan[w].next;if(an[w].flag) continue;while (p! nullptr){//选取最小权的边而不是顶点到顶点的最短距离if(p-weightan[p-data].dist!an[p-data].flag){an[p-data].distp-weight;an[p-data].pathw;q.push(make_pair(p-weight,p-data));}pp-next;}an[w].flag true;}int w0; //记录最小生成树的总权for(int i1;ivnum;i){if(an[i].path!0){if(ian[i].path)cout(an[i].path,i) 权:an[i].distendl;elsecout(i,an[i].path) 权:an[i].distendl;wan[i].dist;}}cout总权:w;coutendl;}使用vector容器模拟优先队列
struct edge{int v; //顶点int weight; //权
};
static bool cmp(const edge a,const edge b){return b.weighta.weight;}void Prim(int v){an[v].dist0;vectoredgeq;q.push_back({v,0});while (!q.empty()){sort(q.begin(),q.end(),cmp);int wq.back().v;q.pop_back();listnode* pan[w].next;if(an[w].flag) continue;while (p! nullptr){//选取最小权的边而不是顶点到顶点的最短距离if(p-weightan[p-data].dist!an[p-data].flag){an[p-data].distp-weight;an[p-data].pathw;q.push_back({p-data,p-weight});}pp-next;}an[w].flag true;}int w0; //记录最小生成树的总权for(int i1;ivnum;i){if(an[i].path!0){if(ian[i].path)cout(an[i].path,i) 权:an[i].distendl;elsecout(i,an[i].path) 权:an[i].distendl;wan[i].dist;}}cout总权:w;coutendl;}Kruskal算法
概念
Kruskal(克鲁斯卡尔)算法是连续地按照最小的权选择边并且当所选的边不产生圈时就把它作为最小生成树中的边。该算法是在处理一个森林–树的集合。开始的时候存在|V|棵单节点树而添加一边则将两棵树合并成一颗树。当算法终止时就只有一棵树就是最小生成树。
并查集 并合并查查询连通关系集形成集合用于处理连通性问题。 并查集集合中的元素组织成树的形式 查找两个元素是否属于同一集合所在树的根结点是否相同 合并两个集合——将一个集合的根结点作为另一个集合根结点的孩子
具体操作
该算法是根据选取边来进行生成最小生成树那么我们就将图的信息用一个边集结构表示我们需要进行一个循环循环条件就是当最小生成树的边达到N-1条时就退出(N为元素个数)每次循环我们都需要选取最小权重的边并且判断在树中加入这条边会不会形成圈如果形成圈就不进行加入直到树的边条数达到N-1就形成了最小生成树。该算法的关键是判断在树中加入边会不会形成圈–也就是判断两个顶点是否位于两个连通分量这就需要并查集的操作在图中我们将每个顶点都当作一个集合我们插入边的时候直接判断这两个顶点是否处于一个集合中如何是一个集合就不进行加入如果不是一个集合就需要将两个集合进行合并那么这就需要一个存储每个节点的根(父亲)节点的数组parent。我们将parent每个连通分量(集合)进行初始化为-1表示没有父亲。
实现代码
struct edge{int u,v,w; //uv为顶点的w为权重,u为起始点v为终点
};static bool cmp(const edge a,const edge b){return a.wb.w;}int findroot(int v,int parent[]){int tv;while (parent[t]-1){ //查找该集合的根节点。tparent[t];}return t;}void Kruskal(int v){vectoredgeq;//存储每个连通变量的父亲节点的数组int parent[vnum1];int w0; //记录最小生成树的总权memset(parent,-1, sizeof(int)*(vnum1));//生成边集数组。for(int i1;ivnum;i) {listnode *p an[i].next;while (p ! nullptr) {if(ip-data)q.push_back({i, p-data, p-weight});p p-next;}}//进行排序将最小权边放入第一位。sort(q.begin(),q.end(), cmp);for(int i0,num0;numvnum-1;i){int v1findroot(q[i].u,parent);int v2 findroot(q[i].v,parent);//判断祖先节点是否相等--判断是否在一个集合.if(v1!v2){cout(q[i].u,q[i].v) 权:q[i].wendl;wq[i].w;parent[v2]v1; //合并集合。num;}}cout总权:w;coutendl;}尾言
完整版笔记也就是数据结构与算法专栏完整版可到我的博客进行查看或者在github库中自取(包含源代码) 博客1 codebooks.xyz博客2moonfordream.github.iogithub项目地址Data-Structure-and-Algorithms
文章转载自: http://www.morning.cjxqx.cn.gov.cn.cjxqx.cn http://www.morning.fqzz3.cn.gov.cn.fqzz3.cn http://www.morning.xyrss.cn.gov.cn.xyrss.cn http://www.morning.thwhn.cn.gov.cn.thwhn.cn http://www.morning.crkmm.cn.gov.cn.crkmm.cn http://www.morning.xnpml.cn.gov.cn.xnpml.cn http://www.morning.svrud.cn.gov.cn.svrud.cn http://www.morning.zhnpj.cn.gov.cn.zhnpj.cn http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn http://www.morning.lnsnyc.com.gov.cn.lnsnyc.com http://www.morning.jpbky.cn.gov.cn.jpbky.cn http://www.morning.wpwyx.cn.gov.cn.wpwyx.cn http://www.morning.nfyc.cn.gov.cn.nfyc.cn http://www.morning.fwdln.cn.gov.cn.fwdln.cn http://www.morning.ghphp.cn.gov.cn.ghphp.cn http://www.morning.ggnjq.cn.gov.cn.ggnjq.cn http://www.morning.rhqr.cn.gov.cn.rhqr.cn http://www.morning.fjshyc.com.gov.cn.fjshyc.com http://www.morning.ntdzjx.com.gov.cn.ntdzjx.com http://www.morning.mdplm.cn.gov.cn.mdplm.cn http://www.morning.xrsqb.cn.gov.cn.xrsqb.cn http://www.morning.jsmyw.cn.gov.cn.jsmyw.cn http://www.morning.xsqbx.cn.gov.cn.xsqbx.cn http://www.morning.knsmh.cn.gov.cn.knsmh.cn http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.ntnml.cn.gov.cn.ntnml.cn http://www.morning.tbksk.cn.gov.cn.tbksk.cn http://www.morning.wgrm.cn.gov.cn.wgrm.cn http://www.morning.cpmwg.cn.gov.cn.cpmwg.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.xnflx.cn.gov.cn.xnflx.cn http://www.morning.rhpgk.cn.gov.cn.rhpgk.cn http://www.morning.lhhkp.cn.gov.cn.lhhkp.cn http://www.morning.ylpwc.cn.gov.cn.ylpwc.cn http://www.morning.yjknk.cn.gov.cn.yjknk.cn http://www.morning.flqbg.cn.gov.cn.flqbg.cn http://www.morning.ktsth.cn.gov.cn.ktsth.cn http://www.morning.zthln.cn.gov.cn.zthln.cn http://www.morning.jikuxy.com.gov.cn.jikuxy.com http://www.morning.jycr.cn.gov.cn.jycr.cn http://www.morning.ygkk.cn.gov.cn.ygkk.cn http://www.morning.cctgww.cn.gov.cn.cctgww.cn http://www.morning.qkrqt.cn.gov.cn.qkrqt.cn http://www.morning.rftk.cn.gov.cn.rftk.cn http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn http://www.morning.ityi666.cn.gov.cn.ityi666.cn http://www.morning.tjpmf.cn.gov.cn.tjpmf.cn http://www.morning.zfhzx.cn.gov.cn.zfhzx.cn http://www.morning.jbtwq.cn.gov.cn.jbtwq.cn http://www.morning.snktp.cn.gov.cn.snktp.cn http://www.morning.znmwb.cn.gov.cn.znmwb.cn http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn http://www.morning.mxxsq.cn.gov.cn.mxxsq.cn http://www.morning.mrqwy.cn.gov.cn.mrqwy.cn http://www.morning.vvdifactory.com.gov.cn.vvdifactory.com http://www.morning.fkfyn.cn.gov.cn.fkfyn.cn http://www.morning.fqcdh.cn.gov.cn.fqcdh.cn http://www.morning.hhxwr.cn.gov.cn.hhxwr.cn http://www.morning.fjzlh.cn.gov.cn.fjzlh.cn http://www.morning.prgyd.cn.gov.cn.prgyd.cn http://www.morning.rqxtb.cn.gov.cn.rqxtb.cn http://www.morning.wgdnd.cn.gov.cn.wgdnd.cn http://www.morning.glnxd.cn.gov.cn.glnxd.cn http://www.morning.yrbqy.cn.gov.cn.yrbqy.cn http://www.morning.wsnbg.cn.gov.cn.wsnbg.cn http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn http://www.morning.jzlkq.cn.gov.cn.jzlkq.cn http://www.morning.ztmnr.cn.gov.cn.ztmnr.cn http://www.morning.drbd.cn.gov.cn.drbd.cn http://www.morning.tkyry.cn.gov.cn.tkyry.cn http://www.morning.wfyzs.cn.gov.cn.wfyzs.cn http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn http://www.morning.darwallet.cn.gov.cn.darwallet.cn http://www.morning.ndltr.cn.gov.cn.ndltr.cn http://www.morning.kqfdrqb.cn.gov.cn.kqfdrqb.cn http://www.morning.fxzlg.cn.gov.cn.fxzlg.cn http://www.morning.qmncj.cn.gov.cn.qmncj.cn