zoukankan      html  css  js  c++  java
  • 算法分析---------------------DFS算法

     深度优先搜索算法(转)


    深度优先搜索算法需要了解深度优先遍历的执行过程,本文中利用一个栈来模拟递归实现中系统设置的工作栈,算法的伪代码描述为:

          (1)初始化栈

          (2)输出起始节点,并标记为已访问,将该节点压入栈

          (3)While(栈不为空)

                           a.取得栈顶节点Top,注意不要从站内删除;

                           b.遍历栈顶节点Top的相邻节点adjacentNode,如果该节点adjacentNode未被标记为已

                              访问,则

                                       输出节点adjacentNode;

                                       标记adjacentNode为已访问;

                                       把adjacentNode压入栈;

                           c.如果没有满足条件的相邻节点adjacentNode,将栈顶节点Top出栈;

    使用情形:

    1.深度优先策略常用于连通图的遍历

    2.深度优先策略也广泛应用于寻找一条满足某种条件的路径。

    算法的时间复杂度为O(n),其中n为节点个数。



    /*
     * main.cpp
     *
     *  Created on: 2013-8-20
     *      Author: 白强
     */
    //源码的修改
    //////////////////////////////////
    //深度优先之节点遍历
    //1---5
    //|   |
    //2---4--6----8
    //|      |
    //3------7
    //  1 2 3 4 5 6 7 8
    //1 0 1 0 0 1 0 0 0
    //2 1 0 1 1 0 0 0 0
    //3 0 1 0 0 0 0 1 0
    //4 0 1 0 0 1 1 0 0
    //5 1 0 0 1 0 0 0 0
    //6 0 0 0 1 0 0 1 1
    //7 0 0 1 0 0 1 0 0
    //8 0 0 0 0 0 1 0 0
    #include <iostream>
    #include <stack>
    using namespace std;
    //节点数
    #define M 8
    //图的矩阵表示
    int matrix[M][M] = { 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0,
            0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,
            0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 };
    //访问标记,初始化为0,
    int visited[M + 1];
    
    //graph traverse
    void GT_DFS() {
        visited[1] = 1;
        stack<int> s;
        cout << 1 << " ";
        s.push(1);
        while (!s.empty()) {
            int top = s.top();
            int i;
            for (i = 1; i <= M; ++i) {
                if (visited[i] == 0 && matrix[top - 1][i - 1] == 1) {
                    visited[i] = 1;
                    s.push(i);
                    cout << i << " ";
                    break;
                }
            }
            if (i == M + 1) {
                s.pop();
            }
        }
    }
    
    int main() {
        GT_DFS();  //输出结果:1 2 3 7 6 4 5 8
        return 0;
    }
  • 相关阅读:
    How To Monitor Remote Linux Host using Nagios 3.0
    Nagios的安装配置与应用之五监控远程Linux服务器
    Unix/Linux下如何使用Vi编辑器
    Nagios Apache报Internal Server Error错误的解决方法
    EMQ X 插件持久化系列 (五)MySQL MQTT 数据存储
    MQTT 5.0
    发布说明
    EMQ X 插件持久化系列 (四)PostgreSQL 数据持久化
    EMQ X 规则引擎系列(十四)- 桥接消息到 Pulsar
    如何使用 MQTT 报文实现发布订阅功能
  • 原文地址:https://www.cnblogs.com/bq12345/p/3271652.html
Copyright © 2011-2022 走看看