图的遍历一

深度优先遍历:

深度优先遍历(Depth_First_Search),也称为深度优先搜索,简称DFS。它从图中某个顶点V出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历,直至图中所有和v有路径想通的顶点都被访问到。若图中尚有未被访问的顶点,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

则实现代码如下:

typedef int Boolean;
Boolean visited[MAX];
void DFS(MGraph G, int i)
{
	int j;
	visited[i] = TRUE;
	printf("%c",vexs[i]);
	for(j = 0;j < G.numVertexes; j++)
	{
		if(G.arc[i][j] == 1 && !visited[j])
			DFS(G,j);
	}
}
void DFSTraverse(MGraph G)
{
	int i;
	for(i = 0;i < G.numVertexes;i++)
	{
		visited[i] = FALSE;
	}
	for(i = 0; i < G.numVertexes; i++)
	{
		if(!visited[i])
			DFS(G,i);
	}
}
如果图结构是邻接表结构,其DFSTraverse函数的代码是几乎相同的,只是在递归函数中因为将数组换成了链表而有不同,代码如下:

void DFS(GraphAdjList GL,int i)
{
	EdgeType *p;
	visited[i] = TRUE;
	printf("%c",GL->adjList[i][j]);
	p = GL->adjList[i].firstedge;
	while(p)
	{
		if(!visited[p->adjvex])
			DFS(GL,p->adjvex);
		p = p->next;
	}
}
void DFSTraverse(MGraph G)
{
	int i;
	for(i = 0;i < G.numVertexes;i++)
	{
		visited[i] = FALSE;
	}
	for(i = 0; i < G.numVertexes; i++)
	{
		if(!visited[i])
			DFS(G,i);
	}
}
广度优先遍历

广度优先遍历(Breadth_First_Search),又称为广度优先搜索,简称BFS。以下是邻接矩阵结构的广度优先遍历算法:

void BFSTraverse(MGraph G)
{
	int i,j;
	Queue Q;
	for(i = 0; i < G.numVertexes; i++)
	{
		visited[i] = FALSE;
	}
	InitQueue(&Q);
	for(i = 0; i < G,numVertexes; i++)
	{
		if(!visited[i])
		{
			visited[i] = TRUE;
			printf("%c",G.vexs[i]);
			EnQueue(&Q,i);
			while(!QueueEmpty(Q))
			{
				DeQueue(&Q,&i);
				for(j = 0; j< G.numVertexes;j++)
				{
					if(G.arc[i][j] == 1 && !visited[j])
					{
						visited[j] = TRUE;
						printf("%c",G.vexs[j]);
						EnQueue(&Q,j);
					}
				}
			}
		}
	}
}
最小生成树

把构造连通网的最小代价生成树称为最小生成树。其中最经典的算法有:普里姆算法和克鲁斯卡算法。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值