algorithm - 广度优先搜索时是否需要区分3个状态字段
问题描述
在用于检查两个节点之间是否存在路由的 CTCI 解决方案中,定义了一个 3 状态枚举。然而,看起来真正重要的是 (visited = true|false) 的二元状态。这是真的?如果不是,为什么需要区分 3 个不同的状态?
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;
}
解决方案
推荐阅读
- sql - 对多列使用连接的累积总和
- python - TensorFlow 优化张量列表
- java - ArrayList 只获取一行,而 ResultSet 读取多于一
- sql-server - TFS 仪表板小部件:查询 TFS_Warehouse 数据库?
- python - 自动完成 ipython 结束方/圆括号
- django - Django-compressor & S3 Boto:静态文件未压缩
- data-structures - 完美哈希表子表构建成功概率
- javascript - 如何使用 v-for 从数组中随机选取特定数量的项目?
- angular - ng gc c-name => 指定的模块不存在
- npm - 为什么我无法升级 NPM?