zoukankan      html  css  js  c++  java
  • DFS和BFS

     #返回上一级

    @Author: 张海拔

    @Update: 2014-01-11

    @Link: http://www.cnblogs.com/zhanghaiba/p/3514489.html

    /*
     *Author: ZhangHaiba
     *Date: 2014-1-10
     *
     *classcical DFS & BFS
     */
    
    #include <iostream>
    #include <cstring>
    #include <queue>
    
    using namespace std;
    const int N = 512;
    int mat[N][N];
    int vis[N];
    
    void set_mat(int n)
    {
        int i, j;
        for (i = 0; i < n; ++i)
            for (j = 0; j < n; ++j)
                cin >> mat[i][j];
    }
    
    //for connected graph
    void DFS(int n, int i)
    {
        vis[i] = 1;
        cout << i << " ";
    
        for (int j = 0; j < n; ++j)
            if (!vis[j] && mat[i][j] > 0)
                DFS(n, j);
    }
    
    queue<int> q;
    
    //for connected graph
    void BFS(int n, int i)
    {
        vis[i] = 1;
        q.push(i);
    
        while (!q.empty()) {
            for (int j = 0; j < n; ++j)
                if (!vis[j] && mat[q.front()][j] > 0) {
                    vis[j] = 1;
                    q.push(j);
                }
            cout << q.front() << " ";
            q.pop();
        }
    }
    
    int main()
    {
        int n;
    
        cin >> n;
        set_mat(n);
        memset(vis, 0, sizeof vis);
        BFS(n, 0);
        memset(vis, 0, sizeof vis);
        DFS(n, 0);
        return 0;    
    }

    测试用例

    输入:
    7
    0 7 0 5 0 0 0
    7 0 8 9 7 0 0
    0 8 0 0 5 0 0
    5 9 0 0 15 6 0
    0 7 5 15 0 8 9
    0 0 0 6 8 0 11
    0 0 0 0 9 11 0

    输出:
    0 1 2 4 3 5 6
    0 1 3 2 4 5 6 

    DFS:

    如果有多个点可以去,选择去第一个点,此时又回到原问题。如果没有点可以去,则回到上一站点,选择去第二个点,一直回到起点为止。

    可以看出,DFS有前进的过程,也有回溯的过程,每个点都会前后访问两次。

    BFS:

    类似树的层次遍历。link(public)

     #返回上一级 

  • 相关阅读:
    Direct hosting of SMB over TCP/IP
    学习 Linux,302(混合环境): 概念
    脚本
    linux加入windows域
    Internet传输协议-TCP
    vCenter Single Sign On 5.1 best practices
    Zoning and LUN Masking
    Fiber Channel SAN Storage
    How to check WWN and Multipathing on Windows Server
    在Windows中监视IO性能
  • 原文地址:https://www.cnblogs.com/zhanghaiba/p/3514489.html
Copyright © 2011-2022 走看看