广度优先搜索算法及其MATLAB实现
目录
广度优先搜索算法及其MATLAB实现
摘要
广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。(来自百度百科)
算法思想
1.对图中的任意的点v,标号l(v),令l = 0。
2.当所有标号为l的,与顶点u相关联的点的端点都已经标号时停止;否则把与u相关联的边的未标记的点用l+1标记,并记录这些边,记 l=l+1,重复2。
程序的参数说明
G表示图的邻接矩阵
W表示图顶点标号
MATLLAB实现
function W = BFS1(G)
n = size(G,1);
W = zeros(1,n);
l = 0;
v = 1;
a1 = find(G(v,:) == 1);
G(v,a1) = 2;
G(a1,v) = 2;
W(a1) = l + 1;
s1 = union(a1,v);
l = l + 1;
while ~isempty(G == 1)
a1 = find(G(s1,:) == 1);
t = length(s1);
d = [];
for i = 1:length(a1)
if a1(i)/t > floor(a1(i)/t)
t2 = floor(a1(i)/t) + 1;
else
t2 = floor(a1(i)/t);
end
if isEmpty(intersect(d,t2)
d = union(d,t2);
end
end
d1 = setdiff(d,s1);
if isEmpty(d1)
break;
else
W(d1) = l + 1;
G1 = G(s1,:);
G1(a1) = 2;
G(s1,:) = G1;
G(:,s1) = G1;
s1 = union(s1,d1);
l = l + 1;
end
end`
测试
测试用例:G =
0 1 0 0
1 0 1 0
0 1 0 1
0 0 1 0
测试结果:W =
0 1 2 3