广度优先搜索(Breadth first search)

和上一篇的二叉树层次遍历几乎一致。

 

#include<stdio.h>
#define N 8
int g[N][N]=
	{
		{0,1,0,0,1,0,0,0},
		{1,0,0,0,0,1,0,0},
		{0,0,0,1,0,1,1,0},
		{0,0,1,0,0,0,1,1},
		{1,0,0,0,0,0,0,0},
		{0,1,1,0,0,0,1,0},
		{0,0,1,1,0,1,0,1},
		{0,0,0,1,0,0,1,0}
	};
char gr[N]={'r','s','t','u','v','w','x','y'};//各顶点
int main()
{
	char color[N]={'w','w','w','w','w','w','w','w'};//初始颜色为白色
	int	d[N]={1e6,1e6,1e6,1e6,1e6,1e6,1e6,1e6};//里源点的距离
	char p[N]={'#','#','#','#','#','#','#','#'};
	int q[N]={'#','#','#','#','#','#','#','#'};//模拟队列
	int i=0,k=0,u=0;
	color[1]='g';//1是源点
	d[1]=0;
	p[1]='#';//源点无父母
	q[i]=1;
	puts("BFS遍历:");
	while(k<N)
	{
		printf("%c",gr[q[k]]);
		if(k<N-1)
			printf(" -> ");
		u=q[k++];
		for(int v=0;v<N;v++)
		{
			if(g[u][v]==1)
			{
				if(color[v]=='w')
				{
					color[v]='g';//其实等价于是否还在队列中  完全可以不用颜色的
					d[v]=d[u]+1;
					p[v]=gr[u];
					q[++i]=v;
				}
			}
		}
		color[u]='b';//出队变成黑色
	}
	puts("\n离源点距离:");
	for(int i=0;i<N;i++)
		printf("d[%c]=%d\t",gr[i],d[i]);
	puts("\n父母:");
	for(int i=0;i<N;i++)
		printf("p[%c]=%c\t",gr[i],p[i]);
	getchar();
	return 0;
}


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值