⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 最小生成树.cpp

📁 数据结构课程设计
💻 CPP
字号:
#define INFINITY 10000
#define MAX_VERTEX_NUM 30
#define OK 1
#define ERROR 0
#include<stdio.h>
#include<iostream.h>
typedef struct ArcCell
{
	char adjvex1,adjvex2;
	int weight;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
{
	char vex[MAX_VERTEX_NUM];
	AdjMatrix arcs;
	int vexnum,arcnum;
}MGraph;
typedef struct 
	{
	    char adjvex;
	    int lowcost;
	}closedge[MAX_VERTEX_NUM];
int CreatUDN(MGraph &G)
{   int LocateVex(MGraph &G,char u);
	int i,j,k;
	char v1,v2;
	int w;
	cout<<"输入这个无向图的顶点个数及弧数"<<endl;
	cin>>G.vexnum>>G.arcnum;
    cout<<"输入顶点的字符"<<endl;
	for(i=0;i<G.vexnum;++i)
		cin>>G.vex[i];
	for(i=0;i<G.vexnum;i++)
		for(j=0;j<G.vexnum;j++)
		{
			G.arcs[i][j].adjvex1=G.vex[i];
			G.arcs[i][j].adjvex2=G.vex[j];
			G.arcs[i][j].weight=INFINITY ;
		}
	for(k=0;k<G.arcnum;k++)
	{   
        cout<<"输入两个顶点的字符及权值"<<endl;
		cin>>v1>>v2>>w;
		i=LocateVex(G,v1);
		j=LocateVex(G,v2);
		G.arcs[i][j].weight=w;	
		G.arcs[j][i].weight=w;
	}
return OK;
}
void MiniSpanTree_PRIM(MGraph &G,char u)
{   int minimum(closedge &close,MGraph &G);
    int LocateVex(MGraph &G,char u);
	int k,i,j;
    closedge  closedge;
	k=LocateVex(G,u);
	for(j=0;j<G.vexnum;++j)
		if(j!=k){closedge[j].adjvex=u;closedge[j].lowcost=G.arcs[k][j].weight;}
	closedge[k].lowcost=0;
	for(i=1;i<G.vexnum;++i)
	{
		k=minimum(closedge,G);
		cout<<closedge[k].adjvex<<":"<<G.vex[k]<<endl;
        closedge[k].lowcost=0;
	    for(j=0;j<G.vexnum;++j)
		{
		   if(G.arcs[k][j].weight<closedge[j].lowcost)
		   {
			   closedge[j].adjvex=G.vex[k];
		       closedge[j].lowcost=G.arcs[k][j].weight;
		  }
		}
	}
}
int minimum(closedge &close,MGraph &G)
{
	int i,val;
	i=0;
	while (i<G.vexnum)
	{
		if(close[i].lowcost>0){val=i;break;}
	    else i++;
	}
    for(i=0;i<MAX_VERTEX_NUM;i++)
	{
		if(close[i].lowcost>0)
		{
			if(close[i].lowcost<close[val].lowcost)
			{
				val=i;
			}
		}
	}
	return val;
}
int LocateVex(MGraph &G,char u)
{
	int i=0;
	while(i<G.vexnum)
	{
	 if(G.vex[i]==u)return i;
	 else i++;
	}
	return ERROR;
}
void main()
{
   MGraph G;
   char u;
   CreatUDN(G);
   cout<<"第一个顶点"<<endl;
   cin>>u;
   MiniSpanTree_PRIM(G,u);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -