图的两种遍历
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入:
9 10 12 13 17 28 27 34 45 47 56 ram xy; var map:array[1..20,1..20] of integer; visited,q:array[1..100] of integer; //使用辅助队列Q和访问标志数组visited。 n,m,a,b,h,r,i,j:integer; procedure bfs(); //按广度优先非递归遍历图,n个顶点,编号为1..n。 var tmp:integer; begin while h<=r do begin tmp:=q[h]; //队头元素出队并置为tmp h:=h+1; write(tmp,' '); for j:=1 to n do if (map[tmp][j]=1) and (visited[j]=0) then //j为tmp的尚未访问的邻接顶点 begin visited[j]:=1;r:=r+1;q[r]:=j; end;//j入队列 end; end;
保证图中所有 顶点被访问
三、广(宽)度优先遍历
宽度优先遍历的基本思想为:
从图中某个顶点v0出发,访问此顶点。然后依次访问v0的 各个未被访问过的邻接结点,然后分别从这些邻接结点出发 宽度优先遍历图,直到图中所有和顶点v0连通的顶点都被访 问到。 若此时图中尚有顶点未被访问,则另选图中一个未曾被访 问的顶点作起始点,重复上述过程,直到图中所有顶点都被 访问到为止。
begin readln(n,m); for i:=1 to m do begin readln(a,b); map[a][b]:=1; map[b][a]:=1; end; for i:=1 to n do if visited[i]=0 then begin visited[i]:=1;work(i);end; end.
注意:
1、图中可能包含回路,因此在遍历过程中,一个顶点有可能被 重复访问,为此设置一个数组记录顶点是否被访问过。
var map:array[1..20,1..20] of integer; 2、图有可能不连通,必须保证图中所有顶点被访问。 for i:=1 to n do if visited[i]=0 then begin visited[i]:=1;work(i);end;
精品课件!
精品课件!
begin readln(n,m); h:=1;r:=1; //置空的辅助队列q for i:=1 to m do begin readln(a,b); map[a][b]:=1;map[b][a]:=1; end; for i:=1 to n do if visited[i]=0 then //i尚未访问 begin q[h]:=i; visited[i]:=1;bfs(); end; end.
二、深度优先遍历
深度优先遍历类似于树的先根遍历,其基本思想为:
从图中某个顶点v0出发,访问此顶点。然后依次从v0 未被访问的邻接结点出发深度优先遍历图,直到图中所有 和顶点v0连通的顶点都被访问到。 若此时图中尚有顶点未被访问,则另选图中一个未曾 被访问的顶点作起始点,重复上述过程,直到图中所有 顶点都被访问到为止。
输入:
9 10 12 13 17 28 27 34 45 47 56 89
输出: 127435689
program xy; var map:array[1..20,1..20] of integer; //邻接矩阵表示法(顺序存储) visited:array[1..20] of integer; //记录顶点是否被访问过 图的深度优先遍历类 n,m,a,b,i:integer; 似二叉树的先根遍历 procedure work(x:integer); var j:integer; begin write(x,' '); for j:=1 to n do if (map[x][j]=1) and (visited[j]=0) then 深度优先遍历 begin visited[j]:=1;work(j);end; end;
一、图的遍历 二、深度优先遍历 三、广(宽)度优先遍历
一、图的遍历 和树的遍历类似,可以从图的某个顶点出发访遍图中其余 顶点,且使每一个顶点仅被访问一次,这个过程称为图的 遍历。
图的遍历比树的遍历复杂。 树的遍历始于根结点,图中没有根结点。 图中可能存在回路。
常用的图遍历方法 深度优先遍历 宽度优先遍历