zoukankan      html  css  js  c++  java
  • 图的连通分量(利用邻接表存储信息)

    用vector实现邻接表

    vector <int> G[100]; //表示有100个顶点的图的邻接表

    G[u].push_back(v); //从顶点u 向顶点v 画边,即在相当于创建一个二维数组G[100][i]

    //搜索与顶点u 相邻的顶点v

    for( int i = 0; i < G[u].size(); i++) {

      int v = G[u][i];

      .......

     }

     邻接表表示法的优点

      只需与边数成正比的内存空间

    邻接表表示法的缺点

    (1)设u 的相邻顶点数量为n,那么在调查顶点u 与顶点v 的关系时,需要消耗O(n)来搜索邻接表。

    (2)难以有效的删除边

    #include<iostream>
    #include<vector>
    #include<stack>
    using namespace std;
    
    static const int MAX = 100000;
    static const int NIL = -1;
    
    int n;
    vector <int> G[MAX];
    int color[MAX];
    
    //深度优先遍历  
    void dfs(int r, int c) {
        stack <int> S;
        S.push(r);
        color[r] = c;
        while( !S.empty() ) {
            int u = S.top();
            S.pop();
            for(int i = 0; i < G[u].size(); i++) {
                int v = G[u][i];
                if(color[v] == NIL) {
                    color[v] = c;
                    S.push(v);
                }
            }
        }
    } 
    
    void assignColor() {
        int id = 1;
        //设置初始值 
        for( int i = 0; i < n; i++ )    color[i] = NIL;
        //以未访问的u为起点进行深度优先搜索 
        for( int u = 0; u < n; u++ ) {
            if( color[u] == NIL )    dfs(u, id++);
        }
    }
    
    int main() {
        int s, t, m, q;
        // n为用户数(顶点数), m 为关系个数 
        cin >> n >> m;
        //建立邻接表 
        for(int i = 0; i < m; i++) {
            cin >> s >> t;
            G[s].push_back(t);
            G[t].push_back(s);
        }
        //深度优先遍历,将可以连通的顶点的color设置成同一值 
        assignColor();
        
        cin >> q;
        
        for(int i = 0; i < q; i++) {
            cin >> s >> t;
            if( color[s] == color[t] ) {
                cout << "yes" << endl;
            }
            else {
                cout << "no" << endl;
            }
        }
        
        return 0;
    }
    
    /*
    10 9 
    0 1 
    0 2
    3 4 
    5 7
    5 6
    6 7
    6 8
    7 8 
    8 9
    3
    0 1
    5 9
    1 3
    */ 
  • 相关阅读:
    HTTP与HTTPS
    各种排序算法的比较
    数据结构之堆排序
    数据结构之希尔排序
    快速排序与归并排序的区别与联系
    数据结构之快速排序
    DVWA-4.3 File Inclusion(文件包含)-High-利用file协议绕过防护策略
    DVWA-4.2 File Inclusion(文件包含)-Medium-双写绕过str_replace替换规则
    DVWA-4.1 File Inclusion(文件包含)-Low
    DVWA-3.4 CSRF(跨站请求伪造)-Impossible
  • 原文地址:https://www.cnblogs.com/mr-wei977955490/p/15367600.html
Copyright © 2011-2022 走看看