kruskal算法(使用并查集+贪心算法)

# include
# include
# define inf 0x3f3f3f3f
using namespace std;
const int maxn=100+5;
typedef struct node{
	int adj; //顶点之间的权重 
}node;
typedef struct graph{
	int vertex[maxn];
   node vertexs[maxn][maxn];//邻接矩阵 
    int vertexnum;
    int edgenum;
}graph;
bool vis[maxn][maxn];
int pre[maxn];
int minsum; 
int find(graph g,int i)  //寻找对应顶点的索引 
{
	for(int j=0;j>g.vertexnum>>g.edgenum;
	for(int i=0;i>g.vertex[i];
	for(int i=0;i>u>>v>>w;
	    int index_u=find(g,u);
		int index_v=find(g,v);
		if(index_u==-1||index_v==-1)
		  {
		  	  cout<<"不存在该节点"<w&&!vis[j][w]&&min_edge>g.vertexs[j][w].adj)  //只访问邻接矩阵的上三角,且访问没有访问过的 
		    	{
		    	   min_edge=g.vertexs[j][w].adj;
				   index_v=j;
				   index_u=w; 	
				   }
			}
		}
		 vis[index_v][index_u]=true;    //标记已访问 
	   if(link(index_v,index_u))   //判断是否构成回路,若构不成回路,再将顶点并入最小生成树的顶点集中 
	   {
	    cout<<"(v"<

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