普利姆算法求最小生成树(用数组表示)



 #include
#include
#include
#include
#include
using namespace std;
//普利姆算法求最小生成树
void Btree(int *a1,int n,int **a,int q)//a1的第一个数为要构建最小生成树的起点,n为要建立的图的顶点数a1的元素个数为n
{
int min,m,i,lq,lz;//min用来记录最小权值
min=100;
a1[0]=q;
for( m=0;m
a[m][q]=0;
for(int x=1;x<=5;x++)
{
i=0;min=100;
do
{int j=0;
for(;j
{
if(min>=a[ a1[i] ][j] && a[ a1[i] ][j]!=0)
{
min=a[ a1[i] ][j];
lq=a1[i];lz=j;//分别记录该权值路径的起点和终点
}
}
i++;
}while(a1[i]!=-1);
a1[i]=lz;
for( m=0;m
a[m][lz]=0;
cout<
}

}
int buildgraph(int n,int **a)
{
int i,j,edge,p1,p2,w;
int *lj=new int[n-1];
int *qz=new int[n-1];
for(i=0;i
for(j=0;j
{
a[i][j]=0;
}
cout<<"请输入图的边数:"<
cin>>edge;
cout<<"请输入每条边的顶点(权值随机产生):"<
srand(time(0));
for(i=0;i
{
cin>>p1>>p2;
w=rand()%100+1;
a[p1][p2]=w;
a[p2][p1]=w;
}
for(i=0;i
{
for(j=0;j
{
cout<
}
cout<
}
return edge;
}
int main()
{
int q,n,i,e,j;
cout<<"请输入要建立的图的顶点数:"<
cin>>n;
int *a1=new int[n];//a1用来存放已经在最小生成树中的顶点
for(i=0;i
{
a1[i]=-1;
}
int **a;
int **b;
a=new int*[n];
b=new int*[n];
for(i=0;i
{
a[i]=new int[n];
b[i]=new int[n];
}
e=buildgraph(n,a);
for(i=0;i
for(j=0;j
b[i][j]=a[i][j];
cout<<"要构建最小生成树的起始点:";
cin>>q;
//a1[0]=q;
cout<<"普利姆算法求最小生成树"<
Btree(a1,n,a,q);
cout<
return 0;
}

你可能感兴趣的:(普利姆算法求最小生成树(用数组表示))