[工学]4-第二章基本数据结构及其运算-树amp图.ppt

[工学]4-第二章基本数据结构及其运算-树amp图.ppt

[工学]4-第二章基本数据结构及其运算-树

* * * * * 1、 横向优先(广度优先)搜索法 ( BFS:Breadth-First Search ) 从图中某一结点开始出发: (1)处理或输出当前结点,并记录当前结点的查访标志; (2)依次访问该结点的后件结点,然后再顺序访问这些后件结点的所有未被访问过 的后件结点。 (3)以此类推,直到所有的被访问结点的后件结点均被访问到。 因此,横向优先搜索算法需要用到一个工作队列,以便正确管理其遍历顺序。 第二章 基本数据结构 横向优先搜索法算法过程框图: 开始 标志数组初始化 Vi=1 Vi访问过 BFS Vi=Vi+1 Vi==Vexnums 结束 N N Y Y 第二章 基本数据结构 E.g 1 4 2 3 5 1 2 3 4 1 3 4 2 vexdata link 5 5 4 3 ^ ^ ^ adjvex next 5 5 1 ^ 5 1 1 4 3 ^ 2 2 1 2 3 4 5 1 f r 遍历序列:1 1 2 3 4 5 4 f r 遍历序列:1 4 1 2 3 4 5 4 3 f r 遍历序列:1 4 3 第二章 基本数据结构 1 2 3 4 5 4 3 2 f r 遍历序列:1 4 3 2 1 2 3 4 5 3 2 f r 遍历序列:1 4 3 2 1 2 3 4 5 3 2 5 f r 遍历序列:1 4 3 2 5 E.g 1 4 2 3 5 1 2 3 4 1 3 4 2 vexdata link 5 5 4 3 ^ ^ ^ adjvex next 5 5 1 ^ 5 1 1 4 3 ^ 2 2 第二章 基本数据结构 1 2 3 4 5 2 5 f r 遍历序列:1 4 3 2 5 1 2 3 4 5 5 f r 遍历序列:1 4 3 2 5 1 2 3 4 5 f r 遍历序列:1 4 3 2 5 E.g 1 4 2 3 5 1 2 3 4 1 3 4 2 vexdata link 5 5 4 3 ^ ^ ^ adjvex next 5 5 1 ^ 5 1 1 4 3 ^ 2 2 第二章 基本数据结构 横向优先搜索法算法过程框图: 开始 标志数组初始化 Vi=1 Vi访问过 BFS Vi=Vi+1 Vi==Vexnums 结束 N N Y Y 第二章 基本数据结构 //队列结构定义 #define MAXSIZE 50 typedef struct mysqqueue{ int sn[MAXSIZE]; int front; int rear; int s; } SQQUEUE; //前文所定义的队列函数 void InitQueue (SQQUEUE *q); int QueueIsEmpty (SQQUEUE q); int AddQueue (SQQUEUE *q, elemtype e); int DelQueue (SQQUEUE *q, elemtype e); 第二章 基本数据结构 void BFSTraverse (struct Vnode * head, int n ) { int *mark, k, m; mark=(int*)malloc(n*sizeof(int)); struct Arcnode* p; SQQUEUE sq; for(k=0; kn; k++) mark[k]=0; InitQueue (sq); printf(BFS遍历序列: ); for(m=1; m=n; m++) { if(mark[m-1]==0) { printf(%c , (head+m-1)-data); mark[m-1] = 1; AddQueue (sq, m); while(!QueueIsEmpty(sq)) { DelQueue (sq, k); 初始化标志数组和队列 如果途中有2个结点之间没有通路(非连通图),则需要进行此循环 从第一个结点开始访问,并入队 从队列中取出结点 第二章 基本数据结构 p=(

文档评论(0)

1亿VIP精品文档

相关文档