- 浏览: 600433 次
- 来自: ...
文章分类
最新评论
-
lgh1992314:
相同的元素呢
一种离散化方法 -
HelloSummerR:
圆心的位置是随机的,于是圆的部分会落到canvas外,那样就显 ...
HTML5 Canvas学习笔记(1)处理鼠标事件 -
hlstudio:
好久没见到sokuban了,这有个java版的,带源码,可以参 ...
求推箱子的最小步数(java) -
肖泽文:
太好了,谢谢你。。有中文注释!
HTML5 推箱子游戏过关演示动画 -
swm8023:
删除操作,将最后一个叶子节点插入后也有可能上浮吧
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
import java.util.Queue; import java.util.ArrayDeque; // 顶点类 class Vertex { public char label; public boolean wasVisited;//顶点是否被访问过的标志 public Vertex(char lab) { label = lab; wasVisited = false; } } //图的邻接矩阵表示实现 class Graph { private final int MAX_VERTS = 20; private Vertex vertexList[]; // 顶点数组 private int adjMat[][]; // 邻接矩阵 private int nVerts; // 当前的顶点数 private Queue<Integer> theQueue; public Graph() { vertexList = new Vertex[MAX_VERTS]; adjMat = new int[MAX_VERTS][MAX_VERTS]; nVerts = 0; for(int j=0; j<MAX_VERTS; j++) for(int k=0; k<MAX_VERTS; k++) adjMat[j][k] = 0; theQueue = new ArrayDeque<Integer>(); } //往图中加一个顶点 public void addVertex(char lab) { vertexList[nVerts++] = new Vertex(lab); } //往图中加一条边 public void addEdge(int start, int end) { adjMat[start][end] = 1; adjMat[end][start] = 1; } //显示顶点 public void displayVertex(int v) { System.out.print(vertexList[v].label); } // 广度优先搜索图 public void bfs() { vertexList[0].wasVisited = true; //从第一个顶点开始搜索,并标记 displayVertex(0); // display it theQueue.offer(0); // 进队列 int v2; while( !theQueue.isEmpty() ) { int v1 = theQueue.poll(); // 队列头元素出队列 // 直到它没有未被访问的邻接点 while( (v2=getAdjUnvisitedVertex(v1)) != -1 ) { vertexList[v2].wasVisited = true; // 标记已被访问过 displayVertex(v2); // display it theQueue.offer(v2); // 进队 } } for(int j=0; j<nVerts; j++) vertexList[j].wasVisited = false; } // 返回v的一个未被访问过的邻接顶点,如果v的所有邻接点都访问过,返回-1 public int getAdjUnvisitedVertex(int v) { for(int j=0; j<nVerts; j++) if(adjMat[v][j]==1 && vertexList[j].wasVisited==false) return j; return -1; } } public class BFSApp { public static void main(String[] args) { Graph theGraph = new Graph(); theGraph.addVertex('A'); // 0 (start for bfs) theGraph.addVertex('B'); // 1 theGraph.addVertex('C'); // 2 theGraph.addVertex('D'); // 3 theGraph.addVertex('E'); // 4 theGraph.addEdge(0, 1); // AB theGraph.addEdge(1, 2); // BC theGraph.addEdge(0, 3); // AD theGraph.addEdge(3, 4); // DE System.out.print("Visits: "); theGraph.bfs(); // breadth-first search System.out.println(); } }
运行结果:
Visits: ABDCE
下载源码:
发表评论
-
图的深搜+回溯练习题:POJ2197
2013-01-18 15:53 1644POJ 2197题意: 给定n个城市及其之间的距离,以及距 ... -
图的练习题(有解答)
2012-12-27 22:23 26521. 填空题 ⑴ 设无向图G ... -
邻接表实现图的广搜和深搜(java模板)
2012-12-11 17:04 2452//邻接表实现图的广搜和深搜(java模板) impor ... -
邻接矩阵实现图的广搜和深搜(java模板)
2012-12-10 20:37 1909经常要用到,放到这里备用!! //邻接矩阵实现图的广搜和深搜 ... -
如何求无向图的最小环
2012-11-13 19:02 2778POJ1734 题意:给定一个N个点的无向图,求一个最小环(各 ... -
深度优先搜索输出有向图中的所有环(JAVA)
2012-11-06 14:22 9618如图:求出有向图的所有环。 import java.uti ... -
三种算法(Floyd、Dijkstra、SPFA)求单源点最短路径。
2012-11-05 13:15 1846题(HDU2544): 在每年的校赛里,所有进入决赛 ... -
Dijkstra算法解HDU1874
2012-11-05 10:15 1343Dijkstra算法是用来解 ... -
SPFA算法求单源最短路径
2012-11-04 23:00 1922很多时候,给定的图存在负权边,这时类似Dijkstra等算法 ... -
图解Bellman-Ford算法
2012-11-03 19:39 5922Bellman-Ford算法: ... -
Bellman-Ford算法教学PPT
2012-11-03 12:06 1451Dijkstra算法是处理单源最短路径的有效算法,但它 ... -
昆虫的同性恋
2012-11-01 19:21 1393题目大意: 输入一个数t,表示测试组数。然后每组第一行两 ... -
拓扑排序入门练习
2012-11-01 16:51 1576拓扑排序简单来说 ... -
并查集入门精讲,实例2个(JAVA)
2012-10-30 14:47 4043一、什么是并查集 ... -
无前趋的顶点优先的拓扑排序方法(JAVA)
2012-10-28 20:20 1856无前趋的顶点优先的拓扑排序方法 该方法的每一步总是输 ... -
Kruskal算法和prim算法求最小生成树学习小结(JAVA)
2012-10-26 14:02 5037prim算法是用来实现图最小生成树的2种常用方法之一,P ... -
图的邻接表存储及遍历(JAVA)
2012-10-10 10:58 5420为图的每个顶点所发出的边建立一个单链表,用一顶点数组存储 ... -
弗洛伊德(Floyd)算法求任意两点间的最短路径
2012-10-01 07:46 6289Floyd-Warshall算法(Floyd-Warsha ... -
单源最短路径( Dijkstra算法)JAVA实现
2012-09-14 14:30 9109单源最短路径问题,即在图中求出给定顶点到其它任一顶 ... -
深度优先搜索与有向无环图的拓扑排序(java实现)
2012-09-11 13:05 5520当每个任务有前后置关系时,需要找到一种满足前后置关系的路 ...
相关推荐
实验的目的包括掌握图的相关概念、掌握用邻接矩阵和邻接表的方法描述图的存储结构、掌握图的深度优先搜索和广度优先搜索遍历的方法及其计算机的实现。 实验的内容包括使用邻接矩阵、邻接表作为图的存储结构建立一个...
本文将深入探讨如何使用邻接矩阵来实现图的广度优先搜索(BFS)和深度优先搜索(DFS),并提供一个Java模板。 首先,我们需要理解邻接矩阵的概念。邻接矩阵是一个二维数组,其中的元素表示图中节点之间的连接。如果...
在Java中,我们可以使用邻接矩阵或邻接表来实现图数据结构。 **邻接矩阵** 是一种二维数组,其中的元素表示对应顶点之间是否存在边。如果图是无向的,矩阵是对称的;如果是有向的,则可能不对称。对于稀疏图(边的...
本主题将深入探讨两种常见的图存储方式——邻接矩阵和邻接表,以及如何在这两种存储方式下实现深度优先遍历(DFS)和广度优先遍历(BFS)。 首先,邻接矩阵是一种直观的图表示方法,它使用二维数组来存储图中每个...
- **图的遍历**:深度优先搜索(DFS)和广度优先搜索(BFS)是常见的图遍历算法,它们可以基于邻接矩阵实现。 - **图的应用**:图被广泛应用于网络路由、社交网络、推荐系统、生物信息学等领域。 通过研究"数据...
4. **遍历**:邻接矩阵便于进行深度优先搜索(DFS)和广度优先搜索(BFS)。DFS可以从矩阵中沿着非零元素向下搜索,BFS可以通过队列来逐层访问矩阵的行或列。 5. **操作效率**:虽然邻接矩阵方便查询任意两个节点之间...
本主题将深入探讨图的两种常见存储方式——邻接矩阵和邻接表,以及如何进行深度优先搜索(DFS)和广度优先搜索(BFS)遍历。 **邻接矩阵**是一种直观且简单的图存储方法。对于一个有n个顶点的图,邻接矩阵是一个n×...
1)实现图的邻接矩阵和邻接表存储结构; 2)完成基于邻接矩阵的深度优先搜索遍历及广度优先搜索遍历; 3)实现从键盘输入任意一对顶点,求出顶点间的最短路径。
相比于邻接矩阵,邻接表在处理稀疏图(边的数量远小于顶点数量的平方)时更节省空间。邻接表的主要优点是它可以根据边的连接关系动态地添加和删除,且遍历效率较高。 二、邻接表的实现 在Java中,我们可以使用...
6. **GraphGui.java**:这是项目中的主要源代码文件,很可能包含了图的类定义,邻接矩阵的实现,以及GUI组件的布局和事件监听。文件可能包括以下功能: - 初始化图和邻接矩阵 - 添加和删除顶点 - 显示和更新GUI以...
在这个Java程序中,我们将探讨如何使用邻接表来实现图的深度优先遍历(DFS)和广度优先遍历(BFS)。邻接表是图数据结构的一种有效实现方式,尤其对于稀疏图(边的数量远小于节点数量的平方)来说,它比邻接矩阵更加...
在上述示例代码中,我们通过邻接矩阵表示图。graph是一个二维数组,其中graph[i][j]表示顶点i和j之间是否存在边。 算法的关键是使用队列来进行遍历。我们从指定的起始顶点开始,并将其入队,并将其标记为已访问。...
加权图(邻接表)遍历广度优先搜索深度优先搜索最短路径广度优先搜索最短路径(有向图) Dikstra的最短路径(加权图) 贝尔曼·福特的最短路径(加权图) 优化的Bellman Ford的最短路径(加权图)Java实作有向图...
对任意给定的图(顶点数不小于20,边数不少于30,图的类型可以是有向图、无向图、有向网、无向网),能够输入图的顶点和边(或弧)的信息,并存储到相应存储结构(邻接矩阵、邻接表、十字链表、邻接多重表,任选其中...
本资源包含了一些图算法的Java实现,包括但不限于广度优先搜索(BFS)、深度优先搜索(DFS)、最小生成树(Minimum Spanning Tree, MST)、弗洛伊德算法(Floyd-Warshall)以及拓扑排序。下面将详细介绍这些算法及其...
4. **寻找欧拉回路**:对于欧拉图,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)策略遍历图。每次访问一个节点时,都要沿着一条未访问过的边移动,直到所有边都被走过一次。记录路径,当返回到起点时,找到的路径...
为了实现BFS,首先我们需要创建一个数据结构来存储图,如邻接矩阵或邻接表。然后,使用一个队列(先进先出)来存储待访问的节点。初始时,将起始状态入队。接着,进入一个循环,每次从队列头部取出一个节点,访问它...
本篇将详细讲解如何使用Java实现图的深度优先遍历(DFS, Depth-First Search)和广度优先遍历(BFS, Breadth-First Search)。 1. **深度优先遍历(DFS)**: - DFS 是一种递归策略,它沿着某条路径深入到图的深处...