`
C_SHaDow
  • 浏览: 49973 次
  • 性别: 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类实现、矩阵类、递归算法、哈夫曼...

    数据结构上机题

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

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

    范例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 图的深度遍历输出

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

    数据结构算法与应用-C++语言描述

    本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一...

    数据结构(C++)有关练习题

    4、用邻接矩阵或邻接图实现一个有向图的存储,并实现单源最短路径算法的实现(这个类的一个成员函数),并能输出该图的关键路径。 注:1、要用面向对象的方法设计代码; 2、一个图是一个类的实例; 3、类...

    数据结构、算法与应用--C++语言描述

    12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法...

    数据结构算法与应用-C__语言描述

    本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一...

    数据结构算法与应用-C C++语言描述

    12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法...

    数据结构算法与应用-C++语言描述.rar

    12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的...

    数据结构与算法:C++描述

    本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一...

    数据结构算法与应用(C++语言描述).rar

    12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法...

    常用算法代码

    | DAG 的深度优先搜索标记 3 | 无向图找桥 3 | 无向图连通度(割) 3 | 最大团问题 DP + DFS 3 | 欧拉路径 O(E) 3 | DIJKSTRA 数组实现 O(N^2) 3 | DIJKSTRA O(E * LOG E) 4 | BELLMANFORD 单源最短路 O(VE) ...

Global site tag (gtag.js) - Google Analytics