A*搜索算法的思想和Jav代码实现

本文提供了优快云博客的一个示例链接,详细内容请通过链接访问。
### DFS BFS 的 Java 实现 #### 深度优先搜索 (DFS) 深度优先搜索沿着树的深度遍历节点,尽可能深入地探索分支。当遇到无法继续前进的情况时,则会回溯至上一节点并尝试其他未访问过的路径[^1]。 ```java import java.util.*; public class Graph { private int V; // Number of vertices private LinkedList<Integer> adj[]; // Adjacency Lists @SuppressWarnings("unchecked") Graph(int v) { V = v; adj = new LinkedList[v]; for (int i=0; i<v; ++i) adj[i] = new LinkedList(); } void addEdge(int v, int w) { adj[v].add(w); } void DFSUtil(int v, boolean visited[]) { visited[v] = true; System.out.print(v + " "); Iterator<Integer> i = adj[v].listIterator(); while (i.hasNext()) { int n = i.next(); if (!visited[n]) DFSUtil(n, visited); } } void DFS(int v) { boolean visited[] = new boolean[V]; DFSUtil(v, visited); } } ``` 此代码定义了一个图类 `Graph` 来表示无向图,并实现了基于递归的方法来进行深度优先遍历[^4]。 #### 广度优先搜索 (BFS) 广度优先搜索按照层次顺序逐层展开搜索过程,在同一层内按从左至右的方式依次处理各个顶点;对于每一个待处理的新顶点而言,总是先将其加入队列中等待后续处理,再从未访问邻接表里挑选下一个要扩展的目标直至完成整张图表上的全部节点扫描工作[^3]。 ```java void BFS(int s) { boolean visited[] = new boolean[V]; LinkedList<Integer> queue = new LinkedList<Integer>(); visited[s]=true; queue.add(s); while (queue.size() != 0) { s = queue.poll(); System.out.print(s+" "); Iterator<Integer> i = adj[s].listIterator(); while (i.hasNext()){ int n = i.next(); if (!visited[n]) { visited[n] = true; queue.add(n); } } } } ``` 这段程序展示了如何利用队列来执行广度优先遍历操作,其中包含了初始化状态设置以及循环迭代逻辑部分[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值