- 浏览: 600424 次
- 来自: ...
文章分类
最新评论
-
lgh1992314:
相同的元素呢
一种离散化方法 -
HelloSummerR:
圆心的位置是随机的,于是圆的部分会落到canvas外,那样就显 ...
HTML5 Canvas学习笔记(1)处理鼠标事件 -
hlstudio:
好久没见到sokuban了,这有个java版的,带源码,可以参 ...
求推箱子的最小步数(java) -
肖泽文:
太好了,谢谢你。。有中文注释!
HTML5 推箱子游戏过关演示动画 -
swm8023:
删除操作,将最后一个叶子节点插入后也有可能上浮吧
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
遍历,直到图中所有顶点都被访问到为止。
import java.util.Stack; // 图的邻接矩阵实现及深度优先搜索图dfs.java //顶点类 class Vertex { public char label; public boolean wasVisited;//此顶点是否被访问过 public Vertex(char lab) // constructor { label = lab; wasVisited = false; } } //图的邻接矩阵实现 class Graph { private final int MAX_VERTS = 20; private Vertex vertexList[]; // 存放顶点的数组 private int adjMat[][]; // 邻接矩阵 private int nVerts; // 当前的顶点数 private Stack<Integer> theStack; public Graph() { vertexList = new Vertex[MAX_VERTS]; adjMat = new int[MAX_VERTS][MAX_VERTS]; nVerts = 0; for(int y=0; y<MAX_VERTS; y++) for(int x=0; x<MAX_VERTS; x++) adjMat[x][y] = 0; theStack = new Stack<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; } //显示顶点v public void displayVertex(int v) { System.out.print(vertexList[v].label); } //深度优先遍历图 public void dfs() // depth-first search { // 从顶点 vertexList[0]开始搜索 vertexList[0].wasVisited = true; //标记已访问过 displayVertex(0); theStack.push(0); // 进栈 while( !theStack.isEmpty() ) { // 查看栈顶元素,看其是否有未访问过的邻接点 int v = getAdjUnvisitedVertex( theStack.peek() ); if(v == -1) // 没有 theStack.pop(); //出栈 else //有 { vertexList[v].wasVisited = true; // 访问v displayVertex(v); theStack.push(v); // 进栈 } } for(int j=0; j<nVerts; j++) //为了继续使用DFS,重置所有顶点的标志 vertexList[j].wasVisited = false; } //从邻接矩阵中判断顶点v是否有未访问过的邻接点 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 DFSApp { public static void main(String[] args) { Graph theGraph = new Graph(); theGraph.addVertex('A'); // 0 (start for dfs) 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.dfs(); System.out.println(); } }
下载源码:
发表评论
-
图的深搜+回溯练习题: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当每个任务有前后置关系时,需要找到一种满足前后置关系的路 ...
相关推荐
本文将深入探讨如何使用Java实现图的邻接矩阵以及如何在该数据结构上执行广度优先搜索(BFS)。 **邻接矩阵** 邻接矩阵是一种二维数组,它用来表示图中顶点之间的连接。如果图是无向的,邻接矩阵是对称的;如果图...
本文将深入探讨如何使用邻接矩阵来实现图的广度优先搜索(BFS)和深度优先搜索(DFS),并提供一个Java模板。 首先,我们需要理解邻接矩阵的概念。邻接矩阵是一个二维数组,其中的元素表示图中节点之间的连接。如果...
实验的目的包括掌握图的相关概念、掌握用邻接矩阵和邻接表的方法描述图的存储结构、掌握图的深度优先搜索和广度优先搜索遍历的方法及其计算机的实现。 实验的内容包括使用邻接矩阵、邻接表作为图的存储结构建立一个...
相比于邻接矩阵,邻接表在处理稀疏图(边的数量远小于顶点数量的平方)时更节省空间。邻接表的主要优点是它可以根据边的连接关系动态地添加和删除,且遍历效率较高。 二、邻接表的实现 在Java中,我们可以使用...
- **图的遍历**:深度优先搜索(DFS)和广度优先搜索(BFS)是常见的图遍历算法,它们可以基于邻接矩阵实现。 - **图的应用**:图被广泛应用于网络路由、社交网络、推荐系统、生物信息学等领域。 通过研究"数据...
本主题将深入探讨两种常见的图存储方式——邻接矩阵和邻接表,以及如何在这两种存储方式下实现深度优先遍历(DFS)和广度优先遍历(BFS)。 首先,邻接矩阵是一种直观的图表示方法,它使用二维数组来存储图中每个...
在这个Java程序中,我们将探讨如何使用邻接表来实现图的深度优先遍历(DFS)和广度优先遍历(BFS)。邻接表是图数据结构的一种有效实现方式,尤其对于稀疏图(边的数量远小于节点数量的平方)来说,它比邻接矩阵更加...
4. **遍历**:邻接矩阵便于进行深度优先搜索(DFS)和广度优先搜索(BFS)。DFS可以从矩阵中沿着非零元素向下搜索,BFS可以通过队列来逐层访问矩阵的行或列。 5. **操作效率**:虽然邻接矩阵方便查询任意两个节点之间...
本主题将深入探讨图的两种常见存储方式——邻接矩阵和邻接表,以及如何进行深度优先搜索(DFS)和广度优先搜索(BFS)遍历。 **邻接矩阵**是一种直观且简单的图存储方法。对于一个有n个顶点的图,邻接矩阵是一个n×...
1)实现图的邻接矩阵和邻接表存储结构; 2)完成基于邻接矩阵的深度优先搜索遍历及广度优先搜索遍历; 3)实现从键盘输入任意一对顶点,求出顶点间的最短路径。
6. **GraphGui.java**:这是项目中的主要源代码文件,很可能包含了图的类定义,邻接矩阵的实现,以及GUI组件的布局和事件监听。文件可能包括以下功能: - 初始化图和邻接矩阵 - 添加和删除顶点 - 显示和更新GUI以...
邻接矩阵是一种常用的图存储方式,其本质是一个二维数组。对于有 � n 个节点的无向图,我们可以用一个 � × � n×n 的二维矩阵 � G 来表示它,其中 � � , � G i,j 表示节点 � i 与节点 � j 之间...
在Java中,我们可以使用邻接矩阵或邻接表来实现图数据结构。 **邻接矩阵** 是一种二维数组,其中的元素表示对应顶点之间是否存在边。如果图是无向的,矩阵是对称的;如果是有向的,则可能不对称。对于稀疏图(边的...
本文主要探讨了在Java中如何使用存储结构来表示图,并特别关注了邻接矩阵这一概念,以及其Java代码实现。 首先,存储结构是图数据结构的基础。在处理图时,我们需要存储节点(顶点)及其相互连接的方式,即边。对于...
在上述示例代码中,我们同样使用邻接矩阵表示图。graph是一个二维数组,其中graph[i][j]表示顶点i和j之间是否存在边。 深度优先搜索使用递归来实现。我们从指定的起始顶点开始,并将其标记为已访问。然后,对于起始...
在提供的压缩包文件中,你可能会找到用不同编程语言(如C++、Java、Python等)实现的DFS和BFS算法,它们可能包含了递归和非递归版本,以及如何表示图(邻接矩阵或邻接表)。通过理解并运行这些代码,你可以更好地...
本资源包含了一些图算法的Java实现,包括但不限于广度优先搜索(BFS)、深度优先搜索(DFS)、最小生成树(Minimum Spanning Tree, MST)、弗洛伊德算法(Floyd-Warshall)以及拓扑排序。下面将详细介绍这些算法及其...
对任意给定的图(顶点数不小于20,边数不少于30,图的类型可以是有向图、无向图、有向网、无向网),能够输入图的顶点和边(或弧)的信息,并存储到相应存储结构(邻接矩阵、邻接表、十字链表、邻接多重表,任选其中...