1. 原理描述:
设图G的初始状态是所有顶点均为访问过。以G中任选一顶点V为起点,则描述为:首先访问出发点V,
接着依次访问V的所有邻接点W1,W2,...,Wi,然后再依次访问与W1,W2,...,Wi邻接的所有未曾访问过的
顶点。依次类推,直到图中所有和起点V有路径相同的顶点都已访问为止。此时从V开始搜索过程结束。
2. 算法设计基本步骤:
(1) 确定图的存储方式。
(2) 设计搜索过程中的操作,其中包括为输出问题解而进行的存储操作。
(3) 输出问题的解空间。
3. 一种实现:求从一个城市到另一个城市间经过的城市最少的路线。
package com.maozj.datastruct.graphic;
/**
* 图的广度优先搜索
*
* @author 毛正吉
*
*/
public class BreadthSearch {
public static void main(String[] args) {
BreadthSearch s = new BreadthSearch();
s.set(8);
s.search();
}
private int[][] jz;
private SQ[] sq;
private int qh;
private int qe;
private int[] visited;
public BreadthSearch() {
/** 存储图的邻接矩阵 */
jz = new int[][] { { 0, 1, 1, 1, 0, 1, 0, 0 },
{ 1, 0, 0, 0, 0, 1, 0, 0 }, { 1, 0, 0, 1, 1, 0, 0, 0 },
{ 1, 0, 1, 0, 0, 0, 1, 0 }, { 0, 0, 1, 0, 0, 0, 1, 1 },
{ 1, 1, 0, 0, 0, 0, 0, 1 }, { 0, 0, 0, 1, 1, 0, 0, 1 },
{ 0, 0, 0, 0, 1, 1, 1, 0 } };
/** 队列集合 */
sq = new SQ[100];
visited = new int[100];
}
public void search() {
/** 队首 */
qh = 0;
/** 队尾 */
qe = 1;
sq[1] = new SQ();
sq[1].city = 1;
sq[1].pre = 0;
visited[1] = 0;
/** 当队列不为空 */
while (qh != qe) {
/** 节点出队 */
qh = qh + 1;
/** 扩展节点 */
for (int i = 0; i < 8; i++) {
if (jz[sq[qh].city][i] == 1 && visited[i] == 0) {
/** 节点入队 */
qe++;
sq[qe] = new SQ();
sq[qe].city = i;
sq[qe].pre = qh;
visited[i] = 1;
if (sq[qe].city == 7) {
out();
return;
}
}
}
}
System.out.println("No avaliable way");
}
/** 输出路径 */
public void out() {
System.out.print(sq[qe].city);
while (sq[qe].pre != 0) {
qe = sq[qe].pre;
System.out.print("---" + sq[qe].city);
}
}
public void set(int n) {
for (int i = 0; i < n; i++) {
visited[i] = 0;
}
}
}
class SQ {
int city;
int pre;
}
分享到:
相关推荐
深度优先搜索是一种探索图或树的递归策略,从起点开始,尽可能深地搜索图的分支。当路径到达叶子节点或者回溯到一个未被完全探索的节点时,才会转向其他分支。DFS通常使用栈来辅助实现。其步骤如下: 1. 从起始节点...
邻接表表示的图的深度优先搜索和广度优先搜索程序 这篇文章介绍了使用邻接表表示的图的深度优先搜索和广度优先搜索程序,旨在帮助读者理解图的深度优先搜索和广度优先搜索算法的实现。 首先,文章定义了图的邻接表...
本实验主题聚焦于图的两种重要遍历方法:深度优先搜索(DFS)和广度优先搜索(BFS)。这两个概念在解决许多实际问题,如网络路由、路径查找、社交网络分析等方面发挥着关键作用。 深度优先搜索(DFS)是一种用于...
### 图深度优先搜索C++实现解析 #### 一、引言 在计算机科学与软件工程领域,图是一种常用的数据结构,用于表示实体之间的关系。在图的诸多算法中,深度优先搜索(Depth-First Search,简称DFS)是探索图的重要手段...
二叉树的深度优先搜索与广度优先搜索实现 二叉树搜索是计算机科学中的一种常见的搜索算法,用于遍历二叉树中的所有节点。二叉树搜索可以分为深度优先搜索和广度优先搜索两种方式。本文将详细介绍二叉树的深度优先...
本主题主要涵盖了三种关键概念:邻接矩阵、邻接表以及图的两种遍历方法——深度优先搜索(DFS)和广度优先搜索(BFS)。 首先,邻接矩阵是一种表示图的数据结构,它是一个二维数组,其中的每个元素代表图中对应节点...
深度优先搜索算法和广度优先搜索算法都是常用的图遍历算法,它们都可以用于解决图的遍历问题。但是,这两种算法有着不同的实现机制和应用场景。深度优先搜索算法更适合用于解决图的深度遍历问题,而广度优先搜索算法...
①使用深度优先搜索来解决八数码问题 ②使用广度优先搜索来解决八数码问题 ③使用过程式表示和实现八数码问题 以及相关代码详细注释 过程式知识表示是将有关某一问题领域的知识, 连同如何使用这些知识的方法,均...
图的深度优先和广度优先遍历 本文主要讨论图的深度优先遍历和广度优先遍历的算法实现,包括获取图的所有边、输出邻接矩阵、图的深度遍历和广度优先遍历的实现。 获取图的所有边 在获取图的所有边时,我们需要定义...
采用邻接表存储图,,输出深度优先搜索序列和广度优先序列。
图的深度优先搜索(DFS, Depth First Search)和广度优先搜索(BFS, Breadth First Search)是图论中的两种基本遍历算法,广泛应用于计算机科学,尤其是在数据结构、算法设计以及网络路径搜索等领域。在C语言环境中...
数据结构——有向图广度优先搜索
"图的深度优先遍历和广度优先遍历算法" 图的深度遍历和广度遍历是两个重要的算法,这也是我们理解并掌握图这一数据结构的基础。通过此程序算法可以进一步掌握图的构造以及遍历的相关知识。 图的深度优先遍历算法 ...
例如,在深度优先搜索(Depth-First Search, DFS)中,算法会尽可能深地探索一条分支,直到达到叶子节点或满足某个条件才回溯。DFS虽然可能更快地找到某个解,但不保证找到的是全局最优解。 **四、BFS与全局/局部...
### Python数据结构与算法之图的广度优先与深度优先搜索算法详解 #### 一、引言 在计算机科学领域,图是一种非常重要的数据结构,它由一系列节点(顶点)以及连接这些节点的边组成。图可用于表示各种各样的问题,...
在这个主题中,我们将深入探讨如何使用类模板实现无向图的邻接矩阵表示法,以及如何通过深度优先搜索(DFS)和广度优先搜索(BFS)遍历这样的图。 首先,让我们理解邻接矩阵的概念。邻接矩阵是一个二维数组,其中的...
本文将详细介绍如何在C语言中实现图的深度优先遍历(DFS)和广度优先遍历(BFS)。这两种遍历方法是图论中最基本且重要的算法之一,在解决实际问题时有着广泛的应用场景,比如网络路由选择、地图导航、社交网络分析...
深度优先搜索(Depth-First Search,DFS)和广度优先搜索(Breadth-First Search,BFS)是图论中两种常用的图遍历算法。它们都是从图的某个节点出发,遍历图中的所有节点,并输出遍历的顺序。 深度优先搜索(DFS) ...
以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。 注: 1.代码共182行。 2.代码经过多次编译运行,无错误。