zoukankan      html  css  js  c++  java
  • dfs 深度优先搜索

    代码:

    #include <iostream>
    using namespace std;
    
    int n; //顶点数
    const int M = 500;
    int graph[M][M];
    bool visit[M];
    
    void dfs(int k){
        visit[k] = 1;
        cout<<k+1<<" ";
        for(int i = 0; i < n; i++)
            if(visit[i]==0 && graph[k][i]==1)
                dfs(i);
    }
    
    int main()
    {
        cin>>n;
        for(int i = 0; i < n; i++)
            for(int j = 0; j < n; j++)
             cin>>graph[i][j];
        for(int i = 0; i < n; i++) //遍历所有类型的图
            if(visit[i]== 0)
                dfs(i);
        return 0;
    }
    

     图的存储结构: 邻接矩阵,也就是二维数组 graph。 M 开到 500 表示图的顶点最多为 500。实际顶点是 n ,由终端输入。

    visit 数组用来确定顶点是否被访问过。 0 代表未被访问。

    示例:

    输入

    9

    0 1 1 0 0 1 0 0 1

    1 0 0 1 0 0 0 0 0

    1 0 0 1 1 0 0 0 0

    0 1 1 0 1 1 0 0 0

    0 0 0 1 0 1 0 0 1

    1 0 0 1 1 0 0 0 0

    0 0 0 0 0 0 0 1 0

    0 0 0 0 0 0 1 0 0

    1 0 0 0 1 0 0 0 0

    输出:

    1 2 4 3 5 6 9 7 8

    结果:

  • 相关阅读:
    sort
    Sicily--17956. Maximum Multiple
    代码1005
    487-3279的解法实例
    487-3279另一种解法
    487-3279
    人工智能--识别句子
    1003-Hangover
    推荐书单(转自GITHUB)
    转自微信号:测试那点事
  • 原文地址:https://www.cnblogs.com/stul/p/10664329.html
Copyright © 2011-2022 走看看