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
广度优先生成树
最新推荐文章于 2024-05-16 11:14:19 发布