`
C_SHaDow
  • 浏览: 51609 次
  • 性别: Icon_minigender_1
  • 来自: 大同
社区版块
存档分类
最新评论

邻接矩阵表示图的深度优先算法-堆栈实现

阅读更多

 对于邻接矩阵表示的图做深度优先搜索用递归的方式实现起来代码简介,也好说明问题。递归函数是:

void DFSM(MGraph *G,int i)  
{  
    int j;  
    printf("深度优先遍历结点: 结点%c/n",G->vexs[i]);   //访问顶点vi  
    visited[i]=TRUE;          
    for(j=0;j<G->n;j++)           //依次搜索vi邻接点  
        if(G->edges[i][j]==1 && !visited[j])  
            DFSM(G,j);  
}  

堆栈实现就是起到代替程序在执行递归时底层保存函数状态的作用。需要保存的状态一个是i,一个j,因此堆栈实现的深度优先搜索的流程图如下: 

 

 

 

 具体函数代码如下:

public void traverseDfs(int v) {
		boolean[] visited = new boolean[vertexlist.length()];
		VertexStack stack1 = new VertexStack();
		VertexStack stack2 = new VertexStack();
		int i, j = 0, k;

		i = vertexlist.findData(v);
		k = i;

		System.out.println("访问[" + i + "," + j + "]:" + v);
		visited[i] = true;

		while (true) {

			while (j < vertexlist.length()
					&& (adjmatrix[i][j] == 0 || visited[j])) {
				System.out.println("路过[" + i + "," + j + "]:" + v);
				j++;
			}

			if (i == k && j == vertexlist.length()) {
				break;
			}

			if (j == vertexlist.length()) {
				i = stack1.pop();
				j = stack2.pop();
				continue;
			}

			v = vertexlist.getData(j);
			System.out.println("访问[" + i + "," + j + "]:" + v);
			visited[j] = true;

			stack1.push(i);
			stack2.push(j);

			i = j;
			j = 0;

		}

	}

 

分享到:
评论

相关推荐

    本人利用pascal 写的delphi算法与数据结构的源代码

    -------用邻接矩阵构造带权有向图-------- --------------最短路径--------------- --------用邻接表构造有向图--------- b c d e e d e ---------初始时各个顶点的入度值--------- 0 1 1 2 3 0 ---------拓扑排序-...

    实战应用Java算法分析与设计-3图的概念以及图的邻接矩阵类实现

    通过本课程的学习,学员可以掌握以下技术点:线性结构与顺序表、单向链表、循环链表、栈的基本概念、链式堆栈、中缀表达式、队列、链式队列、串、MyString、Brute-Force算法、MySet类实现、矩阵类、递归算法、哈夫曼...

    深度优先算法(DFS)遍历有向无环图寻找最优路径

    在实际编程中,我们可能需要创建一个图的表示(如邻接矩阵或邻接表),然后实现DFS算法来遍历图,同时维护一个路径记录和一个最优路径记录,确保在整个过程中找到具有最小权值的路径。 总结来说,深度优先搜索在有...

    数据结构上机题

    广度优先搜索法--邻接矩阵.cpp 回文判断--队列.cpp 回文判断--栈.cpp 树的遍历--递归算法.cpp 树的遍历--非递归算法(先序).cpp 树的遍历--非递归算法(中序).cpp 约瑟夫环--链表.cpp 约瑟夫环--数组.cpp 折半查找...

    数据结构图的深度遍历

    根据给定的信息,本文将详细解释如何在C++中实现图的深度优先遍历,并具体说明如何使用邻接矩阵来存储图以及实现图的深度优先遍历算法。 ### 图的深度优先遍历 #### 一、邻接矩阵存储结构 在计算机科学中,邻接...

    数据结构 图的深度优先遍历和广度优先遍历

    邻接表相对于邻接矩阵来说,更节省空间,尤其对于稀疏图(边的数量远小于顶点数量的平方)更为合适。邻接表由一个数组组成,数组的每个元素是一个链表,链表中的节点代表与该顶点相连的其他顶点。对于有向图,链表中...

    基于深度优先搜索算法图论代码.rar

    1. 图的表示:可能使用邻接矩阵或邻接表来存储图的数据结构。 2. DFS函数:实现DFS的核心代码,包括初始化访问标志、递归调用或使用栈进行迭代的过程。 3. 应用示例:可能包含一些具体的问题实例,如找出图中的所有...

    C语言 输入无向图连通图的顶点数、顶点信息、边数、顶点对序列及遍历的起始点序号,输出深度优先遍历序列

    ### C语言实现无向图的深度优先遍历 #### 一、无向图与深度优先遍历概述 在计算机科学中,无向图是一种数据结构,由一系列节点(顶点)以及连接这些节点的边组成。如果边没有方向性,则称这样的图为无向图。在图论...

    深度优先搜索算法Matlab源码_matlab源码.rar

    在Matlab中实现深度优先搜索,主要涉及到以下几个关键步骤: 1. **初始化**:首先定义图结构。在Matlab中,通常使用邻接矩阵或邻接表来表示图。邻接矩阵是一个二维数组,其中的元素表示两个节点之间是否存在边;...

    c写的数据结构算法----包括了常用的各种算法

    C语言中,图通常通过邻接矩阵或邻接表来表示。 这些数据结构和算法在解决实际问题时具有广泛的实用性。例如,队列可用于操作系统中的进程调度,堆栈用于函数调用和回溯,字符串处理在文本分析中必不可少,数组是...

    数据结构算法实现--严蔚敏的书的算法

    4. **ch5**:第五章可能讲解图的理论,包括图的表示(邻接矩阵和邻接表)、图的遍历(深度优先搜索和广度优先搜索)、最短路径算法(如Dijkstra算法和Floyd-Warshall算法)和最小生成树算法(如Prim算法和Kruskal...

    试设计一个算法,求图中一个源点到其他各顶点的最短路径

    图可以用邻接矩阵或邻接表来表示。在本文中,我们使用邻接表来表示图。 知识点2:邻接表的实现 邻接表是一种链表结构,每个节点包含三个字段:vertex(顶点字段)、cost(表头顶点到该顶点之边上的权值)和link...

    数据结构与算法-java版

    - **邻接矩阵**:使用二维数组存储图中顶点之间的连接关系。 - **邻接表**:通过链表存储每个顶点的相邻顶点列表。 - **双链式存储结构**:使用双向链表存储图的边。 - **图ADT实现设计**:设计图的抽象数据类型...

    数据结构算法实现(严蔚敏版配套实现程序)

    范例1-102 图的邻接矩阵存储表示 ∷相关函数:CreateFAG函数 CreateDG函数 1.7.2 图的邻接表存储表示 324 范例1-103 图的邻接表存储表示 324 ∷相关函数:CreateFAG函数 1.7.3 有向图的十字链表存储表示 335 范例1-...

    基于深度优先搜索的最短路径问题

    深度优先搜索是一种在图或树结构中进行遍历的算法,它尽可能深地探索节点的子树,直到找到目标节点或遍历完所有可能的路径。 深度优先搜索通常用于无环图或确保不会形成环的有向图中,以避免无限循环。在寻找最短...

    数据结构算法实现(严蔚敏版配套实现程序)

    范例1-102 图的邻接矩阵存储表示 ∷相关函数:CreateFAG函数 CreateDG函数 1.7.2 图的邻接表存储表示 324 范例1-103 图的邻接表存储表示 324 ∷相关函数:CreateFAG函数 1.7.3 有向图的十字链表存储表示 335 范例1-...

    C 图的深度遍历输出

    将若干结点组成的有向图用邻接矩阵存入计算机,并深度遍历输出该图

Global site tag (gtag.js) - Google Analytics