`
hcx2013
  • 浏览: 88873 次
社区版块
存档分类
最新评论

graph_dfs

 
阅读更多
package edu.xidian.graph;

class MyStack {
	private final int SIZE = 20;
	private int[] st;
	private int top;

	public MyStack() {
		st = new int[SIZE];
		top = -1;
	}

	public void push(int j) {
		st[++top] = j;
	}

	public int pop() {
		return st[top--];
	}

	public int peek() {
		return st[top];
	}

	public boolean isEmpty() {
		return (top == -1);
	}
}

class Vertex {
	public char label;
	public boolean wasVisited;

	public Vertex(char lab) {
		label = lab;
		wasVisited = false;
	}
}

public class Graph {
	private final int MAX_VERTS = 20;
	private Vertex vertexList[];
	private int adjMat[][];
	private int nVerts;
	private MyStack theStack;

	public Graph() {
		vertexList = new Vertex[MAX_VERTS];
		adjMat = new int[MAX_VERTS][MAX_VERTS];
		nVerts = 0;
		theStack = new MyStack();
	}

	public void addVertex(char label) {
		vertexList[nVerts++] = new Vertex(label);
	}

	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 dfs() {
		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; 
				displayVertex(v); 
				theStack.push(v);
			}
		}
		for (int j = 0; j < nVerts; j++) {
			vertexList[j].wasVisited = false;
		}
	}

	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 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();
	}
}

 

1
1
分享到:
评论

相关推荐

    graph_DFS.zip_C语言单向链表_linux 链表_链表_链表 linux

    本文将详细解析标题为“graph_DFS.zip”中的C语言单向链表在Linux环境下的实现,以及它与链表、图深度优先搜索(DFS)的相关性。 首先,我们要理解什么是单向链表。单向链表是一种线性数据结构,其元素(节点)不是...

    Dfs.rar_create graph_dfs_drawing

    `Dfs.rar_create graph_dfs_drawing` 提示我们这个压缩包包含了实现这一目标的相关代码和资源。 深度优先搜索是一种用于遍历或搜索树或图的算法。在图中,DFS从一个起始顶点开始,尽可能深地搜索图的分支,直到达到...

    graph_bfs_dfs.cpp

    C++实现图的邻接表、邻接矩阵存储方式并输出深度优先遍历和广度优先遍历并输出栈、队列中的变化情况 打印输出队列、栈中入队出队,入栈出栈的情况,可直接运行无编译错误

    DFS_BFS.rar_DFS in java_DFS program in java_DFS_BFS_dfs java_jav

    深度优先搜索(DFS,Depth-First Search)和广度优先搜索(BFS,Breadth-First Search...通过`DFS_BFS.rar`这个压缩包中的源代码,你可以更深入地学习如何在Java中实现这两种搜索算法,并了解它们在实际问题中的应用。

    DFS.rar_DFS algorithm_dfs_dfs python

    def dfs(graph, node, visited=None): if visited is None: visited = set() visited.add(node) print(node) # 访问当前节点 for neighbor in graph[node]: if neighbor not in visited: dfs(graph, neighbor...

    graph_create_tree.rar_tree 转 graph_图和树的转换

    本项目名为"graph_create_tree.rar_tree 转 graph_图和树的转换",其核心功能是实现图与树之间的相互转换。接下来,我们将深入探讨这个主题,了解如何进行这种转换以及它在实际问题中的应用。 首先,我们要理解树与...

    Graph-DFS-BFS.zip_dfs_strategy

    在"Graph DFS BFS.CPP"这个文件中,很可能包含了用C++实现的DFS和BFS算法。C++是一种强大的编程语言,特别适合处理算法和数据结构。文件名中的"DFS"和"BFS"可能分别代表了两个函数,分别实现了这两种图遍历策略。...

    graph_class.zip_ADT Graph_class A_graph

    6. **遍历**:遍历图的顶点和边,例如深度优先搜索(DFS)或广度优先搜索(BFS)。 7. **查找**:查找特定的顶点或边。 8. **获取邻接顶点**:对于给定的顶点,获取与其相连的所有顶点列表。 在`A_graph`类中,这些...

    PyPI 官网下载 | graph-dfs-0.0.7.tar.gz

    "graph-dfs-0.0.7.tar.gz"是一个在PyPI上发布的压缩包,包含了某个Python软件包的源代码。这个包可能是一个用于处理图数据结构和算法的工具,特别是涉及到深度优先搜索(DFS)的实现。 深度优先搜索是一种常用的图...

    Python库 | graph_ltpl-0.41-py3-none-any.whl

    它可能提供了创建、操作和分析图结构的函数和类,如节点(Vertex)、边(Edge)、图遍历算法(如DFS和BFS)、最短路径算法(如Dijkstra或Floyd-Warshall)、图的搜索和优化等功能。 使用`.whl`格式的文件进行安装有...

    DFS.rar_DFS.rar_bfs_depth first_depth first search_graph theory

    深度优先搜索(DFS,Depth-First Search)是图论中一种重要的遍历或搜索算法,常用于解决图或树结构的问题。在这个“DFS.rar”压缩包中,包含了关于DFS算法的实现,以及与之相关的图操作和邻接表构建。在图论编程中...

    点表_dfs_源码

    def dfs_iterative(graph, start): visited = set() stack = [start] while stack: node = stack.pop() if node not in visited: visited.add(node) print(f"访问节点: {node}") stack.extend(graph[node] ...

    dfs.zip_c语言 dfs算法_dfs算法 c语言_visual c_递归函数

    void dfs(int node, bool visited[], Graph* graph) { // 标记当前节点为已访问 visited[node] = true; printf("Visiting node %d\n", node); // 访问当前节点的所有邻接节点 for (int i = 0; i &lt; graph-&gt;num_...

    Matlab_Boost_Graph_Library工具箱.rar

    2. **遍历和搜索**:深度优先搜索(DFS)、广度优先搜索(BFS),用于探索图的结构。 3. **最短路径**:Dijkstra算法、Floyd-Warshall算法,找出图中两点间的最短路径。 4. **最小生成树**:Prim算法、Kruskal算法,...

    python graph algorithm_python_graph_shutszh_zip_algorithm_

    例如,`nx.dfs_edges(G, source)` 可以从源节点开始执行DFS。 3. Dijkstra算法:用于寻找图中两个节点间的最短路径。NetworkX提供了`nx.dijkstra_path(G, source, target)` 和 `nx.dijkstra_path_length(G, source,...

    DFS.rar_dfs

    深度优先搜索(Depth-First Search,简称DFS)是一种在图或树数据结构中遍历或搜索的算法。在这个DFS.rar_dfs的压缩包中,我们可以推测包含的是一个关于深度优先搜索算法的C++编程作业。DFS算法是图论中的基础算法之...

    DFS.zip_As One_depth first search_dfs backtracking_tree dfs

    Depth-first search (DFS) is an algorithm for traversing or searching a tree, tree structure, or graph. One starts at the root (selecting some node as the root in the graph case) and explores as far as...

    Graph图DFS深度优先搜索题型套路【LeetCode刷题套路教程12】

    Graph图DFS深度优先搜索题型套路【LeetCode刷题套路教程12】

    graf_TheClass_graph_

    为了实现图形算法,"TheClass"可能包括了深度优先搜索(DFS),广度优先搜索(BFS),Dijkstra算法,Floyd-Warshall算法等。这些算法通常涉及到递归或迭代的遍历策略,以及优先队列(如`std::priority_queue`)的...

    graph_build3.rar_visual c

    4. 遍历和搜索算法:如深度优先搜索(DFS)或广度优先搜索(BFS),这些算法可以帮助我们遍历图或查找特定路径。 5. 可能还有其他辅助函数,如打印图的结构,检查图的属性(如连通性、有向性等)。 在Visual C++ ...

Global site tag (gtag.js) - Google Analytics