当前位置: 首页 > 知识库问答 >
问题:

Matlab中迷宫的宽度优先搜索[重复]

徐柏
2023-03-14

我正在尝试实现一个广度优先算法,它解决了一个迷宫。作为输入,我有一个n*m的二进制矩阵,其中“1”代表障碍物/墙,“0”代表路径/自由单元。

我确实知道该算法通常是如何工作的,但我正在努力学习如何在matlab中存储和处理信息。所以基本上我从我的启动单元开始,检查所有它的直接邻居是否有障碍物。如果它们是自由的,我将它们标记为一条潜在路径,然后我再次递归地对所有这些单元执行相同的操作。

但是我就是不知道怎么存储信息,所以最后我只有一条路。有什么想法吗?

共有2个答案

荀学文
2023-03-14

这是一个通过深度优先搜索在无方向图中搜索连接组件的函数。BFS应该更容易编码。

function comp = findNodeComponentDFS(G, node)
%Find a connected component of the given node in the unoriented graph. Use
%Deep first search (Cormen, Rivest, Leiserson)
%G - connectivity matrix
%node - given node
%comp - contain the numbers of all nodes in the found connected component
%except the node itself
N = length(G);
white = ones(1,N);%unexamined vertices
grey = zeros(1,N);%vertices that are currently examining but with not all edges have been    examined yet
black = zeros(1,N);%vertices with all the edges have been examined
prev = zeros(1,N);
current = node;
stop=false;
while (~stop)
    grey(current) = 1;
    white(current) = 0;
    next = find(G(current,:) & white,1);
    if (isempty(next))
        black(current) = 1;
        if (prev(current)==0)
            stop = true;
        else
            current = prev(current);%back to previous vertice
        end
    else
        prev(next) = current;
        current = next;
    end
end
comp = find(black);
芮岳
2023-03-14

您可以像在a星型寻路算法中一样使用“打开”和“关闭”列表。检查所有邻居,如果邻居不是障碍物,则将其放入开放列表中。检查所有邻居和具有最小成本的邻居,将其放入封闭列表中。最后,您将在关闭列表中找到最佳路径。基本上是这样的。。

 类似资料:
  • 如果有人有主意请帮帮我。

  • 主要内容:深度优先搜索(简称“深搜”或DFS),广度优先搜索,总结前边介绍了有关图的 4 种存储方式,本节介绍如何对存储的图中的顶点进行遍历。常用的遍历方式有两种: 深度优先搜索和 广度优先搜索。 深度优先搜索(简称“深搜”或DFS) 图 1 无向图 深度优先搜索的过程类似于树的先序遍历,首先从例子中体会深度优先搜索。例如图 1 是一个无向图,采用深度优先算法遍历这个图的过程为: 首先任意找一个未被遍历过的顶点,例如从 V1 开始,由于 V1 率先访问过了,所以

  • 本篇将会结合实例解析宽度优先搜索(BFS)。 一、BFS概念 宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到

  • 本文向大家介绍深度优先搜索,包括了深度优先搜索的使用技巧和注意事项,需要的朋友参考一下 图遍历是按某种系统顺序访问图的所有顶点的问题。遍历图主要有两种方法。 广度优先搜索 深度优先搜索 深度优先搜索(DFS)算法从顶点v开始,然后遍历到之前未访问过的相邻顶点(例如x),并将其标记为“已访问”,然后继续处理x的相邻顶点,依此类推。 如果在任何一个顶点上遇到所有相邻顶点都被访问过,则它将回溯直到找到具

  • 我有一个无向连通图。我使用邻接矩阵实现了它,它是一个2维数组。 据我所知,DFS在兄弟节点之前访问子节点。BFS先于孩子探望兄弟姐妹。 这两个我是这样实现的: 如果让我执行一个从D到E的DFS,是D、C、a、E还是D、E。我以为DFS和BFS必须访问每个节点,在这种情况下B不能访问。我不知道我应该如何改变我目前的方法来满足这些要求。

  • 我正在研究BFS算法,我有一个关于如何将相邻节点插入队列的问题。 例如,假设我们正在处理一个无向图,我们希望执行BFS来输出图的内容,那么我们如何知道在从队列中取出一个初始节点后,相邻节点以什么顺序插入到队列中呢?还有,有没有办法修改邻居节点插入队列的方式? 任何帮助都将不胜感激,谢谢。