breadth-first-search - 比较两个广度优先搜索实现
问题描述
我看到了一个广度优先搜索的实现,它与我所学的略有不同。对 bfs 使用“未访问、已访问、已访问”三个状态有什么好处?还是只是口味问题?
问题:找出图中两个节点之间是否存在路径。
public enum State {
Unvisited, Visited, Visiting;
}
public static boolean search(Graph g,Node start,Node end) {
LinkedList<Node> q = new LinkedList<Node>();
for (Node u : g.getNodes()) {
u.state = State.Unvisited;
}
start.state = State.Visiting;
q.add(start);
Node u;
while(!q.isEmpty()) {
u = q.removeFirst();
if (u != null) {
for (Node v : u.getAdjacent()) {
if (v.state == State.Unvisited) {
if (v == end) {
return true;
} else {
v.state = State.Visiting;
q.add(v);
}
}
}
u.state = State.Visited;
}
}
return false;
}
资料来源:Gayle McDowell 的《破解编码采访》
解决方案
推荐阅读
- mysql - SQL 查询选择在过去 7 天中的 3 个不同天内至少使用过一次的应用程序
- angular - 如果我们没有得到任何响应Angular TypeScript,则在某个时间后超时Web api
- angular - 具有两个不同链接的 Angular i18n
- weka - WEKA分类器输出中的“问号”是什么意思?
- php - 如何正确连接这个 php 字符串
- c++ - 在 C++ 中反转双链表
- prestashop - 如何禁用将哈希添加到缩略图 url
- vue.js - 为什么 v-for 在对象内的对象数组上,即使使用 :key 也不会更新?
- mysql - Visual Studio Code mssql 扩展:SQL Server (mssql) - 无法连接到服务器
- c# - 如何在 VS2019 中调试 asmx Web 服务?VS 不再在 Web 服务的断点处停止