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

📄 l7_8.cpp

📁 数据结构课程的源代码
💻 CPP
字号:
//用克鲁斯卡尔算法求无向网的最小生成树
#include <iostream.h>
const int n=6;
const int e=10;
 struct edgeset
{	int fromvex;
	int endvex;
	int weight;
};
edgeset c[n],ge[e+1];
void kruska(edgeset ge[e+1])    
{
	int i,j;
	int s[n+1][n+1];
	for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
		if(i==j) s[i][j]=1;
		else s[i][j]=0;
    int k=1;
	int d=1;                       
	int m1,m2;
	while(k<n)
	{
		for(i=1;i<=n;i++)
		 for(j=1;j<=n;j++)
		 { if((ge[d].fromvex==j)&&(s[i][j]==1))
           m1=i;
           if((ge[d].endvex==j)&&(s[i][j]==1))
           m2=i;
		 }                                        
	if(m1!=m2)
	{
	  c[k]=ge[d];
	  k++;
	  for(j=1;j<=n;j++)
	  {
		s[m1][j]=s[m1][j]||s[m2][j];
		s[m2][j]=0;
	  }
	}                                        
	d++;
	}
}

void main()
{ 
  for(int i=1;i<=e;i++)
  { cout<<"按从小到大的顺序输入第"<<i<<"条树边及权值"<<endl;
	  cin>>ge[i].fromvex;
    cin>>ge[i].endvex;       
	cin>>ge[i].weight;
  }
  kruska(ge);  
  cout<<"最小生成树的边为:"<<endl;
  for( i=1;i<n;i++)
  { cout<<c[i].fromvex<<"  ";
    cout<<c[i].endvex<<"  ";
	cout<<c[i].weight<<endl;
  }
}

⌨️ 快捷键说明

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