zoukankan      html  css  js  c++  java
  • 图的遍历

    图的遍历,对于dfs我们在主函数里面判断是否还有未遍历的点,然后dfs搜索,如果是旧点,我门就返回,如果不是我们就标记已搜,然后搜索这个点的邻接点。

    这样做的好处就是可以遍历非连通的图,因为我们一个dfs结束的时候可能不能遍历所有的点,所以我们直接判断是否还有新点即可。

    对于bfs也是一样,首先将队列置空,做初始化,然后搜索即可。

    #include <iostream>
    #include <string.h>
    #include <queue>
    using namespace std;
    int AdjMatrix[100][100];
    int vis[100];
    queue<int> Q;
    int n,m,s,e;
    
    void dfs(int p)
    {
        if(vis[p])
            return;
        vis[p]=1;
        printf("%3d", p);
        for (int j = 1; j <= n;j++) {
            if (AdjMatrix[p][j]) {
                dfs(j);
            }
        }
    }
    
    void bfs()
    {
        while (!Q.empty()) {
            int f = Q.front();
            Q.pop();
            for (int i=1;i<=n;i++) {
                if (AdjMatrix[f][i]) {
                    if (!vis[i]) {
                        Q.push(i);
                        vis[i] = 1;
                        printf("%3d", i);
                    }
                }
            }
        }
    }
    
    
    void enter()
    {
        memset(AdjMatrix, 0, sizeof(AdjMatrix));
        memset(vis, 0, sizeof(vis));
        cout << "Please enter the number of the point and the number of the edge." << endl;
        scanf("%d%d", &n, &m);
        printf("Please enter the adjacent point in turn.
    ");
        for (int i = 0;i<m;i++) {
            scanf("%d%d", &s, &e);
            AdjMatrix[s][e] = 1;
        }
    }
    
    int main()
    {
        enter();
        for (int i = 1;i<=n;i++) {
            if (!vis[i]) {
                dfs(i);
            }
        }
        printf("
    ");
    
        enter();
        for (int i=1;i<=n;i++) {
            if (!vis[i]) {
                while (!Q.empty())
                    Q.pop();
                Q.push(i);
                vis[i] = 1;
                bfs();
                printf("
    ");
            }
        }
        return 0;
    }
    /*
    实验数据(非连通)
    5 3
    1 2
    2 3
    4 5
    连通图数据
    5 4
    1 2
    2 3
    3 4
    4 5
    */
  • 相关阅读:
    随机获取Mysql数据表的一条或多条记录
    swap 释放
    linux sed
    mongodb url
    mysql doc
    mysql 8.0 主从复制的优化
    innobackupex 远程备份
    MySQL 8.0新特性:彻底解决困扰运维的复制延迟问题
    pycharm 激活码及使用方式
    MySQL运行内存不足时应采取的措施?
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10211323.html
Copyright © 2011-2022 走看看