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

📄 9-8.c

📁 这个是数据结构经典实现算法
💻 C
字号:
#include "stdio.h"
#include <stdlib.h>
#define MaxVertexNum 100
typedef enum{FALSE,TRUE}Boolean;/*FALSE为0,tRUE为1*/
Boolean visited[MaxVertexNum];
typedef int Vertextype;
typedef struct node{/*边表结点*/
	int adjvex; /*邻接点域*/
	struct node *next; /*链域*/
	/*若要表示边上的权,则应增加一个数据域*/
}EdgeNode;
typedef struct vnode{ /*顶点表结点*/
	Vertextype vertex; /*顶点域*/
	EdgeNode *firstedge;/*边表头指针*/
}VertexNode;
typedef VertexNode AdjList[MaxVertexNum];/*AdjList是邻接表类型*/
typedef struct ALGraph{
	AdjList adjlist;/*邻接表*/
	int n,e; /*图中当前顶点数和边数 */
}Graphic; /*对于简单的应用,无须定义此类型,可直接使用AdjList类型。*/
typedef struct tree
{
	VertexNode * tnode;
	EdgeNode *tedge;
}MSt;
MSt *mst;
void CreateGraphic(Graphic *G)
{/*建立无向图的邻接表表示*/
     	int i,j,k;
      	EdgeNode *s;
      	scanf("%d%d",&G->n,&G->e); /*读人顶点数和边数*/
      	for(i=0;i<G->n;i++){/*建立顶点表*/
        	G->adjlist[i].vertex=getchar(); /*读入顶点信息*/
        	G->adjlist[i].firstedge=NULL;/*边表置为空表*/
       	}
      	for(k=0;k<G->e;k++){/*建立边表*/
         	scanf("%d%d",&i,&j);/*读入边(vi,vj)的顶点对序号*/
         	s=(EdgeNode *)malloc(sizeof(EdgeNode)); /*生成边表结点*/
         	s->adjvex=j; /*邻接点序号为j*/
         	s->next=G->adjlist[i].firstedge;
 	        G->adjlist[i].firstedge=s; /*将新结点*s插入顶点vi的边表头部*/
         	s=(EdgeNode *)malloc(sizeof(EdgeNode));
         	s->adjvex=i; /*邻接点序号为i*/
         	s->next=G->adjlist[j].firstedge;
         	G->adjlist[j].firstedge=s; /*将新结点*s插入顶点vj的边表头部*/
        }   
} 

void KruskalMSt(Graphic *G){/*求连通网G的一棵MSt*/
	int i;
	int e=G->e;
	//初始化,mst是只含n个顶点不包含边的森林*/
	//依权值的递增序对E(G)中的边排序,并设结果在E[0..e-1]中
	for(i=0;i<e;i++) { /*e为图中边总数*/
		//取边中的第i条边(u,v);
		/*if (u和v分别属于mst中两棵不同的树)*/
            	;//mst=mst∪{(u,v)};/*(u,v)是安全边,将其加入mst中*/
        /*if mst已是一棵生成树*/
         return ;
	}
}

void main(void)
{
	Graphic graph;
	CreateGraphic(&graph);
	KruskalMSt(&graph);
}

⌨️ 快捷键说明

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