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

📄 图求最小生成树.txt

📁 图求最小生成树的程序 功能良好 性能较好
💻 TXT
字号:
图求最小生成树



#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
static int vertexcount= 0;
static int edgecount =0;
struct VERTEX 
{
	char vertex[3];
	bool key;
};
static VERTEX * Ve=NULL;
struct EDGE
{
	char edge[3];
	int GRI;
	bool key;
	VERTEX * Vertex1;
	VERTEX * Vertex2;
};
static EDGE *Ed=NULL;
VERTEX * GetVertex(char vertex[])
{
	for(int i=1;i<=vertexcount;i++)
	{
		if(strcmp(vertex,Ve[i-1].vertex)==0) return (Ve+i-1);
	}	
}
void BuildGraph()
{
	char vertex[3];
	cout<<"请输入你要建立图的顶点个数:"<<flush;
	cin>>vertexcount;
	Ve=new VERTEX[vertexcount];
	cout<<"请分别输入"<<vertexcount<<"个顶点"<<endl;
	for(int i=1;i<=vertexcount;i++)
	{
		cin>>Ve[i-1].vertex;Ve[i-1].key=false;
	}
	cout<<"顶点输入完毕!"<<endl;
	cout<<"请输入你要建立图的边的条数:"<<flush;
	cin>>edgecount;
	Ed=new EDGE[edgecount];
	for(i=1;i<=edgecount;i++)
	{
		cout<<"请输入"<<i<<"条边的名称,权和两个关联顶点:"<<flush;
		cin>>Ed[i-1].edge;cin>>Ed[i-1].GRI;
		cin>>vertex;
		Ed[i-1].Vertex1=GetVertex(vertex);
		cin>>vertex;
		Ed[i-1].Vertex2=GetVertex(vertex);
	}
	cout<<"边输入完毕!"<<endl;
}
EDGE * GetMin()
{
	EDGE * d=Ed;EDGE * ad=NULL;
	for(int i=1;i<=edgecount;i++)
	{
		if(d->key&&(d->Vertex1->key||d->Vertex2->key))
		{
			if(!ad) ad=d;
			if(ad->GRI>d->GRI) ad=d;
		}
		d++;
	}
	ad->key=false;
	ad->Vertex1->key?ad->Vertex2->key=true:ad->Vertex1->key=true;
	return ad;
}
void GetTree()
{
	VERTEX * p;
	EDGE * d;
	char vertex[3];
	cout<<"确定你要从哪个顶点开始建树:"<<flush;
	cin>>vertex;
	p=GetVertex(vertex);
	p->key=true;
	cout<<"以下是最小生成树的边:"<<endl;
	for(int i=1;i<vertexcount;i++)
	{
		d=GetMin();
		cout<<d->edge<<" , "<<flush;
	}
	
	delete []Ve;
	delete []Ed;
}
int main()
{

	BuildGraph();GetTree();
	return 0;
}

⌨️ 快捷键说明

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