DFS与BFS 深度优先遍历与广度优先遍历的算法实现
BFS算法实现图的遍历
程序如下:
package algorithm; import java.util.LinkedList; import java.util.Queue; public class Bfs { /** * 好高深啊 广度优先遍历 */ public static void main(String[] args) { // 以邻接矩阵表示树,设定初始值 int[][] graph = new int[7][7]; // 矩阵初始化,无向图,注意对角线的值全设为零,相对称的值设为相同 // 最好先画图再设矩阵 // 先全设为0表示无连接,再将有连接的地方改为1 for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { graph[i][j] = 0; } } graph[0][1] = 1; graph[1][0] = 1; graph[1][2] = 1; graph[2][1] = 1; graph[1][3] = 1; graph[3][1] = 1; graph[3][4] = 1; graph[4][3] = 1; graph[3][5] = 1; graph[5][3] = 1; graph[5][6] = 1; graph[6][5] = 1; // 设置标志数组,为0时表示当前节点没有访问过,为1时表示访问过了,初始化全部设0 int[] mark = new int[graph.length];// graph.length返回的是第一维的维数,不是数组长度 for (int k = 0; k < mark.length; k++) { mark[k] = 0; } // 设置队列,java里LinkedList实现了queue接口,所以用list就能表示队列 Queue<Integer> queue = new LinkedList<Integer>(); // 我们这里从0节点开始遍历 if (mark[0] == 0)// mark[0]=0表示还没查看0节点,下面开始查看 { mark[0] = 1; queue.add(0); while (!queue.isEmpty()) { // 取出队列值并输出 int l = (Integer) queue.poll(); // 最先放到队列里的值,注意队列的先进先出特性啊 System.out.println("l=" + l); for (int n = 0; n < graph.length; n++) { // 如果为1,即表示有连接,且还未入队列,压入队列,设置当前值为-1,表示已经访问 if (graph[l][n] == 1) { if (mark[n] != 1) { // 如果n节点没有访问过则入队列,否则不处理 queue.add(n); mark[n] = 1; } } } } } } }
队列queue变化:
BFS输出结果:
l=0 l=1 l=2 l=3 l=4 l=5 l=6
相关推荐
C#,图论与图算法,有向图(Direct Graph)广度优先遍历(BFS,Breadth First Search)算法与源程序 图的广度优先遍历(或搜索)类似于树的广度优先遍历(参见本文的方法2)。这里唯一需要注意的是,与树不同,图...
图Graph,_深度优先遍历(DFS),_广度优先遍历(BFS)【数据结构和算法入门9】
基于python实现的广度优先遍历搜索(BFS)实验源码+代码详细注释+项目说明+实验结果及总结.7z 广度优先搜索算法(英语:Breadth-First-Search,缩写为BFS),是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树...
本项目为使用Python实现的广度优先遍历搜索(BFS)算法。广度优先搜索算法(英语:Breadth-First-Search,缩写为 BFS),是一种图形搜索算法。简单的说,BFS 是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点...
/*图的深度优先遍历搜索递归算法。g为存储图的邻接表,i为遍历的初始顶点编号, */ void dfs(ALGraph *g,int i) { ArcNode *p = NULL; printf("%d\t", g -> adjlist[i].data); visited[i] = 1; p = g -> ...
那么广度遍历的顺序就是ABCDEF 从上到下,从左到右去访问 运用到格子游戏中,找寻某点到某点的路径 【假设只记录四方位(遍历顺序上左下右)】 向队列中存入起点,遍历该点周围的点,边界看做障碍,遍历到结束点返回...
深度优先搜索(亦称深度优先遍历,Deep First Search,简称DFS),广度优先搜索(亦称广度优先遍历,Breadth First Search,简称BFS)都是很基础的算法,也是大家很熟悉的。算法,又叫宽度优先遍历,或横向优先遍历...
广度优先遍历是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。 广度优先搜索遍历类似于树的按层次遍历。对于无向连通图,广度优先搜索是从图的某个顶点v0出发...
主要介绍了Java实现利用广度优先遍历(BFS)计算最短路径的方法,实例分析了广度优先遍历算法的原理与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
数据结构预算法上机作业 图 深度遍历广度遍历
数据结构课程中的深度优先搜索算法、广度优先搜索算法的C语言程序,在Turbo C 2.0上调试通过。
大学课程、数据结构、代码、建立图的存储结构、广度优先搜索遍历路径
int v) //从顶点v开始深度优先遍历图 void DFSTraverse(ALGraph *G) //深度优先遍历图 void BFSTraverse(ALGraph *G) //广度优先遍历图 <br>队列的基本操作设置如下:(具体操作上一次上机题中已经...
bfs广度优先搜索(BFS)是一种计算机科学中的算法,用于遍历或搜索树或图。它通过从起始节点开始,逐层向外扩展,直到找到目标节点或遍历完所有节点。BFS算法保证了在遍历过程中,先访问的节点具有较小的深度。 BFS...
其中,广度优先搜索(Breadth-First Search,简称BFS)和深度优先搜索(Depth-First Search,简称DFS)是两种最基本且广泛使用的图遍历算法。 广度优先搜索(BFS)是一种按层次遍历图的算法。它从图的某个顶点开始...
在上述示例代码中,我们通过邻接矩阵表示图。graph是一个二维数组,其中graph[i][j]表示顶点i和j之间是否存在边。 算法的关键是使用队列来进行遍历。...最终的输出结果将会是按照广度优先搜索顺序遍历的顶点序列。
基于广度优先搜索算法的图遍历程序 该程序遍历一个箭头区域(红色或蓝色)。 它找到从左上角的箭头到右下角的靶心的路线。 它遵循箭头所指的方向,并且仅停在其他彩色箭头或靶心上。 例如,从红色开始,然后选择一...
对bfs(广度优先遍历)和dfs(深度优先遍历)的详细解析,帮助人们理解广搜和深搜
2.搜索算法:包括深度优先搜索(DFS)和广度优先搜索(BFS),在 图论、树的遍历等场景下应用较为广泛。 3.动态规划算法:动态规划算法是解决最优化问题的一种常用算法, 需要熟练掌握方法和实现。 4. 图论算法:...