广度优先生成树

typedef struct QPNode{//特殊的节点类型,可以将节点编号和在树上的指针联系起来
	int data;
	CSnode* pointer;
}QPNode,*QPQueue;
QPQueue Q;
InitQueue(Q);//辅助队列
void BFS_Tree(Graph G,int v,CSTree &T){
	int w,k;  bool first = true; //是否为v位置的第一个为访问的相邻结点的标志  
	CSnode *t,*q;
	if(!T){//第一次进来时,根节点为空的时候  
		T = (CSTree)malloc(sizeof(CSNode));
		*T = {GetVex(G,v),NULL,NULL};
		visited[v] = true;
	}//if
	for(w = FirstAdjVex(G,v);w >= 0;w = NextAdjVex(G,v,w)){  
		if(!visited[w]){  
			visited[w]=true;  
			q = (CSTree)malloc(sizeof(CSNode)); 
			*q = {GetVex(G,w),NULL,NULL}; 
			if(first){T->firstchild=q;first=false;}  
			else t->nextsibling=q;  
			t=q;  
			if(FirstAdjVex(G,w) >= 0){//还有更外层的结点
				QPNode Qtmp = {w,t};  EnQueue(Q,Qtmp);
			}//if
		}//if
	}//for
	if(!QueueEmpty(Q)){  
		QPNode Qtmp;  DelQueue(Q,Qtmp);  
		BFS_Tree(G,Qtmp.data,Qtmp.pointer); //以T的第一个孩子为根节点开始继续建树  
	}//if
}//BFS_Tree

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值