最小生成树算法之Prime

# include

using namespace std;

#define inf 10000
#define n 6
int a[6][6]={
     0,6,1,5,inf,inf,
			 6,0,5,inf,3,inf,
			 1,5,0,inf,1,4,
			 5,inf,5,0,inf,2,
			 inf,3,1,inf,0,6,
			 inf,inf,4,2,6,0};          //邻接矩阵输入 
int visited[6],closest[6],lowcost[6];  
//visited[i]表示第【i】个点是否已进入树中, lowcost[i]表示点i与生成树的距离,closest[i]表示 i在树中的邻接点 
void prime(int a[6][6])
{
     
	visited[0]=1;
	cout<<'1'<<endl;
	for(int i=1;i<=n-1;i++)
	{
     
		visited[i]=0;
		closest[i]=0;
		lowcost[i]=a[0][i];
	}    //初始化 
	for(int i=0;i<n-1;i++)
	{
     
		int min=inf;
		int k=0;
		for(int j=0;j<n;j++)
		{
     
			if(lowcost[j]<min && visited[j]==0)  //找与树最近的点j 
			{
     
				min=lowcost[j];
				k=j;
			}		
		}
		cout<<k+1<<' '<<endl;     //将这个点输出 
		visited[k]=1;      //该点已经进入生成树 
		lowcost[k]=0; 
		for(int j=0;j<=n;j++)  //调整 lowcost和 closest 
		{
     
			if(visited[j]==0 && a[k][j]<lowcost[j])
			{
     
				lowcost[j]=a[k][j];
				closest[j]=k;
			}
		}
			
		
	}
	
}

int main()
{
     
	prime(a);
	return 0;
}

你可能感兴趣的:(算法练习)