C-数据结构-图-应用

//应用举例
//计算连通分量
int visited[vnum];
Count_Component (Graph g)
{
	int count,v;
	for (v=0;v<g.vexnum;v++)
		visited[v]=0;
	count=0;
	for (v=0;v<g.vexnum;v++)
		if (!visited[v])
		{
			count++;
			printf("连通分量%d包含以下顶点:",count);
			Dfs (g,v);
			printf("\n");
		}
	printf("共有%d个连通分量\n",count);
}
//最小生成树
//Prim算法
const int MAX_INT=32767;
typedef struct gp
{
	int vexs[vnum];
	int arcs[vnum][vnum];
	int vexnum,arcnum;
}Graph;
struct//记录U到V-U中最小权值和顶点
{
	int adjvex;
	int lowcost;
}closedeg[vnum];

Prim(Graph g,int u)
{
	int v,k,j,min;
	for (v=0;v<g.vexnum;v++)//初始化
		if (v!=u)
		{
			closedge[v].adjvex=u;
			closedge[v].lowcost=g.arcs[u][v];//将邻接矩阵中与u相关的的权导入到closedge[vnum]中
		}
	closedge[u].lowcost=MAX_INT;
	for (k=0;k<g.vexnum;k++)
	{
		min=closedge[k].lowcost;
		v=k;
		for (j=0;j<g.vexnum;j++)//找真正最小权值边
			if (closedge[j].lowcost<min)
			{
				min=closedge[j].lowcost;
				v=j;
			}
		printf("%d %d\n",closedge[v].adjvex,v);//输出生成树边
		closedge[v].lowcost=MAX_INT;//v加入U
		for (j=0;j<g.vexnum;j++)
			if (g.arcs[v][j]<closedge[j].lowcost)
			{
				closedge[j].lowcost=g.arcs[v][j];
				closedge[j].adjvex=v;
			}
	}
}
//拓扑排序-邻接表
const int vnum=20;
typedef struct arcnode
{
	int adjvex;
	struct arcnode *nextarc;
}ArcNode;
typedef struct vexnode
{
	VertexType vertex;
	int in;//记录入度
	ArcNode *firstarc;
}AdjList [vnum]
typedef struct gp
{
	AdjList adjlist;
	int vexnum,arcnum;
}Graph;

Tp_Sort (Graph g)
{
	LkStk *S;
	ArcNode *p;
	int m,i,v;
	InitStack(S);
	for (i=0;i<g.vexnum;i++)
		if (g.adjlist[i].in==0)
			Push (S,i);
	m=0;
	while (!EmptyStack(S))
	{
		v=Gettop(S);
		Pop(S);
		printf ("%d",v);
		m++;//输出节点数+1
		p=g.adjlist[v].firstarc;
		while (p!=NULL)
		{
			(g.adjlist[p->adjvex].in)--;//入度-1
			if (g.adjlist[p->adjvex].in==0)
				Push(S,p->adjvex);
			p=p->nextarc;
		}
	}
	if (m<g.vexnum)
		return 0; //有环
	else 
		return 1;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值