有关图的存储结构的程序4(图论算…
2016-04-08 21:45
309 查看
用广度优先搜索建立图的邻接表。
程序:
var
state,num:array[0..100] of longint;
v:array[0..100] of boolean;
g:array[0..100,0..100] of longint;
n,e:longint;
procedure bfs;
var
head,tail,i,ans:longint;
begin
head:=0;
tail:=1;
state[1]:=1;
v[1]:=false;
ans:=1;
repeat
inc(head);
for
i:=1 to num[state[head]] do
if v[g[state[head],i]] then
begin
inc(tail);
state[tail]:=g[state[head],i];
v[g[state[head],i]]:=false;
end;
until
head>=tail;
for i:=1 to head
do
write(state[i],' ');
end;
procedure init;
var
x,y,i:longint;
begin
readln(n,e);
for i:=1 to e do
begin
readln(x,y);
inc(num[x]);
inc(num[y]);
g[x,num[x]]:=y;
g[y,num[y]]:=x;
end;
fillchar(v,sizeof(v),true);
end;
begin
init;
bfs;
end.
版权属于: Chris
原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102v0tw.html
转载时必须以链接形式注明原始出处及本声明。
程序:
var
state,num:array[0..100] of longint;
v:array[0..100] of boolean;
g:array[0..100,0..100] of longint;
n,e:longint;
procedure bfs;
var
head,tail,i,ans:longint;
begin
head:=0;
tail:=1;
state[1]:=1;
v[1]:=false;
ans:=1;
repeat
inc(head);
for
i:=1 to num[state[head]] do
if v[g[state[head],i]] then
begin
inc(tail);
state[tail]:=g[state[head],i];
v[g[state[head],i]]:=false;
end;
until
head>=tail;
for i:=1 to head
do
write(state[i],' ');
end;
procedure init;
var
x,y,i:longint;
begin
readln(n,e);
for i:=1 to e do
begin
readln(x,y);
inc(num[x]);
inc(num[y]);
g[x,num[x]]:=y;
g[y,num[y]]:=x;
end;
fillchar(v,sizeof(v),true);
end;
begin
init;
bfs;
end.
版权属于: Chris
原文地址: http://blog.sina.com.cn/s/blog_83ac6af80102v0tw.html
转载时必须以链接形式注明原始出处及本声明。
相关文章推荐
- 有关图的存储结构的程序3(图论算…
- 有关图的存储结构的程序2(图论算…
- 有关图的存储结构的程序1(图论算…
- 寻找欧拉路(图论算法)
- 最小函数值(树)
- 鱼塘钓鱼(树)
- 二叉树的后序遍历(树)
- 二叉树的中序遍历(树)
- 二叉树的前序遍历(树)
- USACO 3.4 美国血统
- 排序(树)
- 合并果子(树)
- 一个关于堆的程序(树)
- 查找二叉树(树)
- 对称二叉树(树)
- 二叉树输出(树)
- 2004年分区联赛普级组之三 FBI树
- 最详细的 Android NavigationDrawer 开发实践总结
- 相似图片搜索——感知哈希算法
- Oracle RAC 单节点宕机 has a disk HB, but no network HB