#include<stdio.h> 
#include<stdlib.h> 
#include<string.h>
#include<limits.h> 

#include"ALGraph.h"
#include"sqqueue.h" 


void BFSTraverse(ALGraph G);  //按广度优先非递归遍历图G
int  visited[MAX_VERTEX_NUM];    // 访问标志数组(全局量)

int main()
{
	ALGraph g;
	CreateGraphF (g); // 利用数据文件创建图
	Display(g);       // 输出图
	printf("广度优先遍历序列:\n");   
	BFSTraverse(g);
	return 0;
}


void BFSTraverse(ALGraph G)
{	//按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited。
	/********** Begin **********/  
	int v,u,w;
	ArcNode *p;
	SqQueue Q;
	for(v=0;v<G.vexnum;v++)
		visited[v]=0;
	InitQueue(Q);
	for(v=0;v<G.vexnum;v++)
		if(!visited[v]){
			visited[v]=1;
			visit(G.vertices[v].data);
			EnQueue(Q,v);
			while(!QueueEmpty(Q)){
				DeQueue(Q,u);
				p=G.vertices[u].firstarc;	
				while(p){
					w=p->data.adjvex;
					if(!visited[w]){
						visited[w]=1;
						visit(G.vertices[w].data);
						EnQueue(Q,w);
					}
					p=p->nextarc;
				}
			}
		}
    printf("\n");
    
	/********** End **********/
}
posted on 2024-06-20 17:37  findscripter  阅读(19)  评论(0)    收藏  举报