永发信息网

求助c++编程

答案:1  悬赏:70  手机版
解决时间 2021-04-21 10:09
  • 提问者网友:遮云壑
  • 2021-04-20 16:42

建立一个无向图,并按照深度优先和广度优先进行搜索,然后用Prim方法找出其最小生成树。

最佳答案
  • 五星知识达人网友:野慌
  • 2021-04-20 17:29

程序代码:


#include <iostream.h>
const int Max=6;//顶点个数
void Prim(int n,int c[7][7])
{
// char *closest="CEAFBD";//从一点出发到权值最小的点
// int lowcost[Max]={1,3,1,2,3,2};//从一点出发到其他边的最小权
int lowcost[Max];
int closest[Max];
bool s[Max];
s[1]=true;
for(int i=2;i<=n;i++)
{
lowcost[i]=c[1][i];
closest[i]=1;
s[i]=false;
}


for(i=1;i<n;i++)
{
int min=10;//由于各条边的权值都小于10,所以在此可以使用10作为两个点没有边的情况,即当做无穷大使用(INFINITY)
int j=1;
for(int k=2;k<=n;k++)
if((lowcost[k]<min)&&(!s[k])){min=lowcost[k];j=k;}
cout<<j<<" "<<closest[j]<<endl;
s[j]=true;


for(k=2;k<=n;k++)
if((c[j][k]<lowcost[k])&&(!s[k])){lowcost[k]=c[j][k];closest[k]=j;}
}


}
void main()
{
//初始化权值c[i][j]:从i点到j点的权值
//第0个顶点不用,从标号为1的顶点开始
int c[7][7]={
{10,10,10,10,10,10,10},//1-0| 1-1,1-2,1-3,1-4,1-5,1-6
{10,10,6,1,5,10,10}, //2-0| 2-1,2-2,2-3,2-4,2-5,2-6
{10,6,10,5,10,3,10}, //3-0| 3-1,3-2,3-3,3-4,3-5,3-6
{10,1,5,10,5,6,4},
{10,5,10,5,10,10,2},
{10,10,3,6,10,10,6},
{10,10,10,4,2,6,10}};
//普里姆算法调用
Prim(6,c);//结果从右往左看


}


我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯