文档

想象广度优先和深度优先的搜索

的结果的可视化函数bfsearchdfsearch通过突出显示图的节点和边。

创建并绘制有向图。

S = [1 2 3 3 3 3 4 5 6 7 8 9 9 9 10];T = [7 6 1 5 6 8 2 4 4 3 7 1 6 8 2];G = digraph(s,t);情节(G)

在图上执行深度优先搜索。指定“allevents”返回算法中的所有事件。同时,指定重新启动作为真正的以确保搜索访问图中的每个节点。

T = dfsearch(G, 1,“allevents”“重启”,真正的)
T = 38 x4 EdgeIndex表事件节点优势  ________________ ____ __________ _________ startnode南南南discovernode 1南南南edgetonew南1 7 discovernode 7南南南edgetonew南7 3 10 discovernode 3南南南edgetodiscovered南3 1 3 edgetonew南3 5 4 discovernode 5南南南edgetonew南5 4 8 discovernode 4南南南edgetonew南4 2 7 discovernode 2南南南edgetonew南2 6 2 discovernode 6南南南edgetodiscovered南6 4 9 finishnode 6南南南finishnode 2南南南南南南finishnode finishnode 4 5南南南edgetofinished南3 6 5 edgetonew南3 8 6 discovernode 8南南南edgetodiscovered南8 7 11 finishnode 8 3南南南南南南finishnode finishnode 7南南南finishnode 1南南南startnode 9南南南discovernode 9南南南edgetofinished南9 1 12 edgetofinished南9 14 finishnode 6 13 edgetofinished南9 8 9 10南南南南南南startnode discovernode 10南南南edgetofinished NaN10 2 15 finishnode 10 NaN NaN NaN

表中的值,T,对于可视化搜索很有用。这个函数visualize_search.m中执行的搜索结果的一种使用方法bfsearchdfsearch要根据事件表突出显示图中的节点和边,T。该函数在算法的每一步之前暂停,因此您可以通过按任何键缓慢地逐步进行搜索。

保存visualize_search.m在当前文件夹中。

函数visualize_search (G, t)% G是一个图或有向图对象,t是调用% BFSEARCH或DFSEARCH在该图上。%示例输入:% G = digraph([1 2 3 3 3 3 4 5 6 7 8 9 9 9 10],…% [7 6 1 5 6 8 2 4 4 3 7 1 6 8 2]);% t = dfsearch(g, 1, ' events', 'Restart', true);版权所有:The MathWorks, Inc。isundirected = isa(G,“图”);如果isundirected将图替换为相应的有向图,因为我们需要分开两个方向的%边[src, tgt] = findedge(G);G = digraph([src;tgt]、[tgt;src], [1: numges (G), 1: numges (G)]);结束h = plot(G,“NodeColor”,[0.5 0.5 0.5],“EdgeColor”,[0.5 0.5 0.5],“EdgeLabelMode”“汽车”);2 = 1:尺寸(t) 1)开关t.Event (2)情况下“startnode”突出(h, t.Node (ii),“MarkerSize”分钟(h.MarkerSize) * 2);情况下“discovernode”突出(h, t.Node (ii),“NodeColor”“r”);情况下“finishnode”突出(h, t.Node (ii),“NodeColor”“k”);否则如果isundirected edgeind = intersect_find (g .)权重== t.EdgeIndex(ii)),findedge(G, t.Edge(ii, 1), t.Edge(ii, 2)));其他的edgeind = t.EdgeIndex(ii);结束开关t.Event (2)情况下“edgetonew”突出(h,“边缘”edgeind,“EdgeColor”“b”);情况下“edgetodiscovered”突出(h,“边缘”edgeind,“EdgeColor”,[0.8 0 0.8]);情况下“edgetofinished”突出(h,“边缘”edgeind,“EdgeColor”,[0 0.8 0]);结束结束nodeStr = t.Node;如果isnumeric(nodeStr) nodeStr = num2cell(nodeStr);nodeStr = cellfun(@num2str, nodeStr,“UniformOutput”、假);结束edgeStr = t.Edge;如果isnumeric(edgeStr) edgeStr = num2cell(edgeStr);edgeStr = cellfun(@num2str, edgeStr,“UniformOutput”、假);结束如果~isnan(t. node (ii)) title([char(t{ii, 1})“on Node”nodeStr {2}]);其他的标题([char (t {ii, 1})在边缘(on Edge)edgeStr {ii, 1}”、“edgeStr {ii, 2},')边索引'sprintf (' % d ', t{ii, 4})]);结束disp (“按任意键继续……”)暂停结束disp (“完成”。)关闭所有

使用此命令运行visualize_search.m在图G搜索结果T

visualize_search (G, T)

图表开始时全是灰色的,然后每次按下一个键都会出现新的搜索结果。搜索结果按以下方式高亮显示:

  • “startnode”—启动节点增加大小。

  • “discovernode”—节点转动红色的当他们被发现时。

  • “finishnode”—节点转动黑色的在他们完成之后。

  • “edgetonew”-导致未发现节点的边转弯蓝色的

  • “edgetodiscovered”-通往发现节点的边会转弯品红色的

  • “edgetofinished”-通往完成节点的边转弯绿色

gif的结果步进时所看到的动画visualize_search.m

另请参阅

|||

相关的话题