最小生成树中minium函数怎么写

1.c语言最小生成树怎样写

prim算法/* 函数功能:求图的最小生成树。

函数原形:GraphClass*Prim(GraphClass &Graph); 参数:GraphClass&Graph:目标图。返回值:GraphClass*型,最小生成树地址。

备注:无。*/ template GraphClass*Prim(GraphClass &Graph) { ArcType Min,Infinite=ArcType(unsigned(~0)/2); GraphClass *Mcst=new GraphClass(Graph.GetSize()); int i,j,k,x,y; bool *Vertex=new bool[Graph.GetSize()]; for (i=0;i<=Graph.GetSize()-1;i++) { Vertex[i]=false; Mcst->UpdateVex(i,Graph.GetVex(i)); } Vertex[0]=true; for (k=1;k<=Graph.GetSize()-1;k++) { Min=Infinite; for (i=0;i<=Graph.GetSize()-1;i++) for(j=0;j<=Graph.GetSize()-1;j++) if (Graph.GetArc(i,j)>0&& Vertex[i] && !Vertex[j] && Graph.GetArc(i,j)UpdateArc(x,y,Graph.GetArc(x,y)); } return Mcst; } Kruskal算法/* 函数功能:求图的最小生成树。

函数原形:GraphClass*Kruskal(GraphClass &Graph); 参数:GraphClass&Graph:目标图。返回值:GraphClass*型,最小生成树地址。

备注:无。*/ template GraphClass*Kruskal(GraphClass &Graph) { ArcType Min,Infinite=ArcType(unsigned(~0)/2); GraphClass *Mcst=new GraphClass(Graph.GetSize()); int i,j,k,x,y,a,b,*VexSet=new int[Graph.GetSize()]; for (i=0;i<=Graph.GetSize()-1;i++) { VexSet[i]=i; Mcst->UpdateVex(i,Graph.GetVex(i)); } for (k=1;k<=Graph.GetSize()-1;k++) { Min=Infinite; for (i=0;i<=Graph.GetSize()-1;i++) for(j=0;j<=Graph.GetSize()-1;j++) if (Graph.GetArc(i,j)>0&& VexSet[i]!=VexSet[j] && Mcst->GetArc(i,j)==0 && Graph.GetArc(i,j)UpdateArc(x,y,Graph.GetArc(x,y)); } return Mcst; }。

2.求我下面程序函数的流程图

普里姆算法

功能:是利用普里姆算法求出无向网所对应的最小生成树.

实现过程:在其函数体中,首先,定义closedge用于存放最小生成树中的顶点,调用函数Locate()求出起点u在顶点向量表中的位置,初始化U={u},利用for循环对V-U中的顶点i,初始化,再利用for循环找n-1条边,其中,调用函数Minium()求出辅助数组中权值最小的边, 并将其在辅助数组中的相应位置返回到主调函数中,最后,输出<;起点->;终点 权值>。

代码如下:

void PRIM(MGraph &G,VertexType u)

{

int i,j,k;

minside closedge;

k=LocateVex(G,u);

for(j=0;j<G.vexnum;++j) // 辅助数组初始化

{

if(j!=k)

{

strcpy(closedge[j].adjvex,u);

closedge[j].lowcost=G.arcs[k][j].adj;

}

}

closedge[k].lowcost=0; // 初始,U={u}

printf("\t\t最小代价生成树的各条边及权值为:\n");

printf("\n");

printf("\t\t<;起点->;终点>\t权值\n");

for(i=1;i<G.vexnum;++i)

{ // 选择其余G.vexnum-1个顶点

k=minimum(closedge,G); // 求出T的下一个结点:第K顶点

printf("<%s-%s>\t\t%d\n",closedge[k].adjvex,G.vexs[k],closedge[k].lowcost); // 输出生成树的边

closedge[k].lowcost=0; // 第K顶点并入U集

for(j=0;j<G.vexnum;++j)

if(G.arcs[k][j].adj<closedge[j].lowcost)

{

// 新顶点并入U集后重新选择最小边

strcpy(closedge[j].adjvex,G.vexs[k]);

closedge[j].lowcost=G.arcs[k][j].adj;

}

}

}

(5)子函数int LocateVex(MGraph G,VertexType u)

功能:是求出某个顶点在顶点向量表中的位置。

实现过程:在其函数体中通过for循环将某一顶点与顶点向量表中的所有顶点进行比较,当出现两者相等时,将该顶点在vexs[]数组的下标通过return语句返回,否则返回-1;

代码如下:

int LocateVex(MGraph G,VertexType u) //若G中存在顶点u,则返回该顶点在图中的位置,否则返回-1

{

int i;

for(i = 0; i < G.vexnum; ++i)

if( strcmp(u, G.vexs[i]) == 0)

return i;

return -1;

}

(6)子函数int minimum(minside S,MGraph G)

功能:是求出辅助数组中权值最小的边。

代码如下:

int minimum(minside S,MGraph G) //求closedge.lowcost的最小值

{

int i=0,j,k,min;

while(!S[i].lowcost)

i++;

min=S[i].lowcost; // 第一个不为0的值

k=i;

for(j=i+1;j<G.vexnum;j++)

if(S[j].lowcost>0)

if(min>S[j].lowcost)

{

min=S[j].lowcost;

k=j;

}

return k;

}

3.c语言最小生成树怎样写

prim算法/*函数功能:求图的最小生成树。

函数原形:GraphClass*Prim(GraphClass &Graph);参数:GraphClass&Graph:目标图。返回值:GraphClass*型,最小生成树地址。

备注:无。*/templateGraphClass*Prim(GraphClass &Graph){ ArcTypeMin,Infinite=ArcType(unsigned(~0)/2); GraphClass *Mcst=newGraphClass(Graph.GetSize()); int i,j,k,x,y; bool *Vertex=new bool[Graph.GetSize()]; for (i=0;i<=Graph.GetSize()-1;i++) { Vertex[i]=false; Mcst->UpdateVex(i,Graph.GetVex(i)); } Vertex[0]=true; for (k=1;k<=Graph.GetSize()-1;k++) { Min=Infinite; for (i=0;i<=Graph.GetSize()-1;i++) for(j=0;j<=Graph.GetSize()-1;j++) if (Graph.GetArc(i,j)>0&& Vertex[i] && !Vertex[j] && Graph.GetArc(i,j)UpdateArc(x,y,Graph.GetArc(x,y)); } return Mcst;} Kruskal算法/*函数功能:求图的最小生成树。

函数原形:GraphClass*Kruskal(GraphClass &Graph);参数:GraphClass&Graph:目标图。返回值:GraphClass*型,最小生成树地址。

备注:无。*/templateGraphClass*Kruskal(GraphClass &Graph){ ArcTypeMin,Infinite=ArcType(unsigned(~0)/2); GraphClass *Mcst=newGraphClass(Graph.GetSize()); int i,j,k,x,y,a,b,*VexSet=newint[Graph.GetSize()]; for (i=0;i<=Graph.GetSize()-1;i++) { VexSet[i]=i; Mcst->UpdateVex(i,Graph.GetVex(i)); } for (k=1;k<=Graph.GetSize()-1;k++) { Min=Infinite; for (i=0;i<=Graph.GetSize()-1;i++) for(j=0;j<=Graph.GetSize()-1;j++) if (Graph.GetArc(i,j)>0&& VexSet[i]!=VexSet[j] && Mcst->GetArc(i,j)==0 &&Graph.GetArc(i,j)UpdateArc(x,y,Graph.GetArc(x,y)); } return Mcst;}。

4.最小生成树的定义以及有关算法

Kruskal算法和Prim算法 任何只由G的边构成,并包含G的所有顶点的树称为G的生成树(G连通).加权无向图G的生成树的代价是该生成树的所有边的代码(权)的和.最小代价生成树是其所有生成树中代价最小的生成树.参考代码:(仅为主程序,更多代码在 /zsb/zsx/zsx07/zsx079/main9/zsx079001.htm Kruskal算法和Prim算法 任何只由G的边构成,并包含G的所有顶点的树称为G的生成树(G连通). 加权无向图G的生成树的代价是该生成树的所有边的代码(权)的和. 最小代价生成树是其所有生成树中代价最小的生成树. 参考代码: (仅为主程序,更多代码在 /bbs/dispbbs.asp?boardID=1&ID=69&page=1 解压密码: ) #include "Sets.h" #include "themap.h" #include "windows.h" #include #include #include using namespace std; /* 功能: 演示Kruskal算法和Prim算法 集合的并,元素查找的操作及应用 说明: 代码均在vc++6.0环境下编译均通过 在非VC++6.0环境下编译请去掉头文件 windows.h 和函数 end() 如果NULL未定义请自定义 #define NULL 0 或 #define NULL ((void*)0) 作者: baihacker 时间: 2007.2.3 */ const VSIZE = 7;//7个顶点 const INFINITY = 10000;//10000作为无穷大来处理 void LoadData(int cost[][VSIZE+1], Edge edge[]); void end(); /* 函数名: Kruskal 和 Prim 参数: 边,代价,边数,顶点数,最小代价生成树的顶点 返回值: 返回值为-1,不存在最小代价生成树 返回值大于0时为最小代价生成树的代价 最小代价生成树的边在vector& t */ int Kruskal(Edge edge[], int cost[][VSIZE+1], int esize, int vsize, vector& t); int Prim (Edge edge[], int cost[][VSIZE+1], int esize, int vsize, vector& t); int main() { int cost[VSIZE+1][VSIZE+1];//0不用 Edge edge[9];//9条边 vector t;//用来存储最小代价生成树的顶点 int mincost;//最小代价 LoadData(cost, edge); if ( (mincost = Kruskal(edge, cost, 9, VSIZE, t))!=-1) { cout<<"最小代价是:"<& t) { Sets s(esize); priority_queue, EdgeGreater> pq; int mincost = 0; for (int i = 0;i& t) { priority_queue, EdgeGreater> pq; vector sortededge; int i; for (i =0;i

7.如何证明用 Kruskal's 算法生成的树是最小生成树

为了避免最小生成树不唯一的问题,可以不妨假设这个图所有的边长都不相等

(注意最小生成树的总长度是原图边长的连续函数,所以可以这样加强条件)

然后用反证法,假定Kruskal算法中的第k步首次出现错误,算法选了E1,但实际上必须选另一条边E2才能得到最小生成树T0

E1连接了两个连通分支,这两个连通分支在最终的T0里是连通的,所以把T0和E1放在一起之后形成的图有一个环,在这个环里一定有k步或之后新选的边(如果没有的话仅凭前k-1条边和E1不会构成环),依照E1的定义,这个环里存在比E1长的边,用E1换掉这条边之后得到的树T1比T0更短,矛盾

8.数据结构 Prim和Kruskal最小生成树 的代码怎么写

将城市看成是点,城市之间的距离看成是点之间的权值。

下面是PRIM算法实现的最小生成树代码。,利用邻接矩阵存储边的信息。

程序已通过编译了,可以直接运行。#include #include typedef int VRType; typedef char InfoType;#define MAX_NAME 3/*顶点字符串的最大长度+1*/#define MAX_INFO 20/*相关信息字符串的最大长度+1*/ typedef char VertexType[MAX_NAME];#define INFINITY 32767/*用整型最大值代替无穷大*/#define MAX_VERTEX_NUM 20/*最大顶点个数*/ typedef enum GraphKind;/**/ typedef int PathMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef int ShortPathTable[MAX_VERTEX_NUM]; typedef struct { VRType adj; /*顶点关系类型。

对无权图,用1(是)或0(否)表示相邻否*/ /*对带全图,则为权值类型*/ InfoType *info; /*该弧相关信息的指针(可无)*/ }ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { VertexType vexs[MAX_VERTEX_NUM]; /*顶点向量*/ AdjMatrix arcs; /*邻接矩阵*/ int vexnum,arcnum; /*图的当前顶点数和弧数*/ GraphKind kind; /*图的种类标志*/ }MGraph; int LocateVex(MGraph G,VertexType u) { /*初始条件:图G存在,u和G中顶点有相同特征*/ /*操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回-1*/ int i; for(i=0;i0) if(min>SZ[j].lowcost) { min=SZ[j].lowcost; k=j; } return k; } void MiniSpanTree_PRIM(MGraph G,VertexType u) {/*用普利姆算法从第u个顶点出发构造网G的最小生成树T,输出T的各条边*/ int i,j,k; minside closedge; k=LocateVex(G,u); for(j=0;j

9.利用普里姆算法求解最小生成树,写出步骤或画图表示过程

<1,6>;边长度未知,这里看成无穷大。

历次循环中,选择两端点分别在U,V中的边中长度最小者,

具体如下:

1. 将1加入U中,其余点加入V中。

2. 选择边<1,7>;,将7加入U中,从V中除去该点。

3. 选择边<7,6>;,将6加入U中,从V中除去该点。

4. 选择边<1,2>;,将2加入U中,从V中除去该点。

5. 选择边<2,3>;,将3加入U中,从V中除去该点。

6. 选择边<2,4>;,将4加入U中,从V中除去该点。

7. 选择边<2,5>;,将5加入U中,从V中除去该点。

结束。由上述六条边组成的树为求得的最小生成树。

最小生成树中minium函数怎么写

转载请注明出处育才学习网 » 最小生成树中minium函数怎么写

知识

导致沙尘暴单词怎么写

阅读(186)

本文主要为您介绍导致沙尘暴单词怎么写,内容包括沙尘暴的单词怎么写,沙尘暴的英文怎么写,沙尘暴如何形成英语作文60词。沙尘暴的形成需具备4个条件。 一是地面上的沙尘物质。它是形成沙尘暴的物质基础。 二是大风。这是沙尘暴形成的动力基

知识

出租车替代说明怎么写

阅读(226)

本文主要为您介绍出租车替代说明怎么写,内容包括出租车间文字怎么写,出租车被运管暂扣了,现在运管所要求写一份营运说明,怎么写,岗位人员替换情况说明怎么写。被扣肯定是因为你有违规行为。根据现实情况描述一下违规内容,并深刻检讨一下,保证

知识

辩论赛改辩小结怎么写

阅读(190)

本文主要为您介绍辩论赛改辩小结怎么写,内容包括谁告诉我辩论赛中改如何写攻辩小结需要注意什么我方辩题是理想,辩论赛的立论与一辩小结怎么写,辩论赛总结怎么写最好有范文。攻辩小结,实际上就是一辩陈词的延续,是对辩题的一些深化,以及对本方

知识

防火英语怎么写

阅读(232)

本文主要为您介绍防火英语怎么写,内容包括防火用英语怎么写,消防安全的英语怎么写,怎么写英语防火通知作文。消防安全的英语:fire safety英文发音:[ˈfaɪə(r) ˈseɪfti]例句:Is obviously a temporar

知识

财报分析目的怎么写

阅读(239)

本文主要为您介绍财报分析目的怎么写,内容包括会计报表分析的一般目的是什么,上市公司财务报表分析的目的和意义,财务报表分析的最终目的是什么。会计报表分析,主要是利用资产负债表和利润表等财务报告对其财务状况、经营成果和现金流量进行

知识

电力系统入网证申请书怎么写

阅读(207)

本文主要为您介绍电力系统入网证申请书怎么写,内容包括如何写电力入网许可证的申请书谢谢,如何写电力入网许可证的申请书谢谢,用电开户申请书范文。申请书XXXXXXX电力管理局申请人XXXXXXXX男女XXXXXXXX民族XXXXXXXX岁XXXXXXXX职业住址XXXXX

知识

lseps怎么写

阅读(192)

本文主要为您介绍lseps怎么写,内容包括申请英国大学P.s怎么写,打算申请LSE和UCL硕士,怕自己PS写的不够精彩,有专门帮人写PS,我想自己申请LSE,你知道的,伦敦政经对PS要求蛮高的,我朋友给。这个问题不好随便给你写的,这里可以说没有人能拍胸脯

知识

课题调研方案怎么写

阅读(267)

本文主要为您介绍课题调研方案怎么写,内容包括开题报告中的课题研究方案怎么写,如何写课题研究方案,课题研究计划怎么写。原发布者:南昌人昌北课题研究方案的设计及写法什么是课题研究方案(一)研究方案的涵义和特点课题研究方案就是课题确定之

知识

怎么去写销售经验

阅读(208)

本文主要为您介绍怎么去写销售经验,内容包括如何写有几年销售经验的简历,销售心得怎么写,销售工作经验总结怎么写。写有销售经验的简历可以从以下几点着手:负责加盟渠道的建设与管理,拓展商场资源;组织实施营销推广计划,完成部门的销售目标和回

知识

房屋成交心得怎么写

阅读(238)

本文主要为您介绍房屋成交心得怎么写,内容包括二手房成交心得体会100字怎么写,二手房成交心得体会100字怎么写,二手房成交后心得100字怎么写。卖二手房应注意的事项是:避免中介公司的暗箱操作 。某些中介以个人买房名义现金收购业主房屋,利用

知识

工程报备报告怎么写

阅读(230)

本文主要为您介绍工程报备报告怎么写,内容包括工程审批报告怎么写,工程施工报备计划怎么写,报优质工程的申请报告怎么写。国家优质工程奖申报程序及申报资料要求 (一)申报、推荐工作由各行业、地方协会负责,并严格按照《国家优质工程审定办法

知识

夏令营没有科研经历怎么写

阅读(201)

本文主要为您介绍夏令营没有科研经历怎么写,内容包括申请考研夏令营师没科研经历怎么写,简历科研经历怎么写,如果没有科研经历,问你讲一下大学期间的科研经历怎么说可以说自。目前,各个学校夏令营陆陆续续开始接受申请了。申请材料中,其他的

知识

数学辅导班宣传单怎么写

阅读(342)

本文主要为您介绍数学辅导班宣传单怎么写,内容包括周末数学补习班宣传单怎么写,辅导班宣传单怎么写啊,补习班招生宣传单怎么写。快印美根据多年宣传单印刷的经验总结以下三个要点: 制作宣传单的单位。辅导班的名称,就是标题,一定要放在抢眼的

知识

三级查房记录怎么写

阅读(264)

本文主要为您介绍三级查房记录怎么写,内容包括副主任医师书写的病例如何体现三级医师查房记录,上级医师查房记录怎么书写,副主任医师书写的病历如何书写三级医师查房。原发布者:鑫淼图文上级医师查房记录______年_____月_____日,时间:________

知识

write函数怎么写数字

阅读(196)

本文主要为您介绍write函数怎么写数字,内容包括ofstream中write函数怎么用的,C语言中的Write函数,关于C++文件操作中的write函数跟写入文件数字乱码而字符串不乱码的。你是用二进制写的,怎么读的,用编辑器看的? 那乱码就对了要用代码读才不乱

知识

javamain函数怎么写

阅读(248)

本文主要为您介绍javamain函数怎么写,内容包括java的main函数如何写,javamain函数里写什么,java中,main方法怎么写。main方法定义如下:public static void main(String[] args){…}关键字的作用:(1)public

知识

excel绝对值函数怎么写

阅读(262)

本文主要为您介绍excel绝对值函数怎么写,内容包括在excel中求绝对值的函数是什么,绝对值符号在EXCEL里怎么输入,EXCEL怎么求绝对值。ABS ,主要功能:求出相应数字的绝对值;使用格式:ABS(number)。参数说明:number代表需要求绝对值的数值或引用的

知识

access条件函数怎么写

阅读(288)

本文主要为您介绍access条件函数怎么写,内容包括access语法怎么写,access数据库这样的函数如何写,access多条件筛选函数。have access to 有机会接近/进入,有权利使用/进入例句:Only a few people have access to

知识

c语言中最小值代码怎么写

阅读(310)

本文主要为您介绍c语言中最小值代码怎么写,内容包括C语言编程中在许多值中取最小值怎么写,用C语言求最小值,在线等,C语言怎么编写两个数的最小值。#include<stdio.h>main(){int a[5],i,x,min;for(i=0;i<5;i++)scanf("%d",

知识

易语言最小化到托盘命令怎么写

阅读(283)

本文主要为您介绍易语言最小化到托盘命令怎么写,内容包括易语言最小化到托盘命令怎么写,用什么命令能让易语言的程序最小化到托盘运行,易语言程序最小化后怎么到托盘。不知道你的窗口有没有边框,给你个例子

知识

atmega128随机数函数怎么写

阅读(257)

本文主要为您介绍atmega128随机数函数怎么写,内容包括随机数的函数如何写,求一个ATmega128定时器1的简单程序,随机数的函数怎么写。求10-23的: #include <time.h> #include<stdio.h> int suiji (void) { int

知识

写代码中rgb函数怎么写

阅读(225)

本文主要为您介绍写代码中rgb函数怎么写,内容包括关于RGB函数,代码中怎样把RGB颜色值转换成16进制,RGB函数中的3个数字分别表示什么。简单的移位和按位加: int r,g,b; int c; // TC 用 long int; // 如果次序是RRGGBB c = r

[/e:loop]