zoukankan      html  css  js  c++  java
  • 链式前向星的两种写法

    1.y氏写法

    链式前向星注意事项,如果a->b,b->c在前向星中a的临点只有b,所以在求连通块的数量的时候不能一次dfs,要多次dfs!
    
    const int N=?,M=??;//N是点数,M是边数
    
    int h[N],e[M],ne[M],idx;
    
    void add(int a,int b,int W)
    {
        e[idx]=b;
        w[idx]=W;
        ne[idx]=h[a];
        h[a]=idx++;
    }
    
    for(int i=h[u];~i;i=ne[i])
    {
        i可以理解为点的编号,在无向图建立反向边,tarjan求父节点可以写成 tarjan(j,i)//遍历下一个点,父节点为i
        i从idx=0开始的,和 i^1不谋而合
        int j=e[i];//下一个点是
        int W=w[i];//a->的边权是
    }
    输入
    3 4
    1 2
    1 3
    2 3
    3 2
    输出
    这是第1个点
    1 0 
    这是第2个点
    2 
    这是第3个点
    3  
    可见i可以代表某条边
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    const int N=1e5+10,M=N*2;
    
    int h[N],e[M],ne[M],idx;
    void add(int a,int b)
    {
        e[idx]=b;
        ne[idx]=h[a];
        h[a]=idx++;
    }
    int main()
    {
        int n,m;
        cin>>n>>m;
        memset(h,-1,sizeof h);
        
        while(m--)
        {
            int a,b;cin>>a>>b;
            add(a,b);
        }
        for(int i=1;i<=n;i++)//起点
        {
            cout<<"这是第"<<i<<"个点"<<endl;
            for(int j=h[i];~j;j=ne[j])
            {
                int k=e[j];
                cout<<j<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
    

    2.黑书写法

    const int N=?,M=??;//N是点数,M是边数
    
    int idx=0,h[N];
    struct edge
    {
        int to,next,w;
    }edge[N];
    
    void add(int u,int v,int W)
    {
        edge[idx].to=v;
        edge[idx].w=W;
        edge[idx].next=head[u]
        head[u]=idx++;
    }
    
    for(int i=h[u];~i;i=edge[i].next)
    {
        int j=edge[i].to;//下一条边
        int W=edge[i].w;//边权
    }
    
    
  • 相关阅读:
    python yield yield from
    python isinstance()与type()的区别
    python isinstance用法
    python 展开嵌套的序列
    python getmtime() 最近修改文件内容的时间
    python getctime() 文件最后一次的改变时间
    python getatime() 查看文件的访问时间
    python模拟随机游走
    getopt例子
    matplotlib 代码风格
  • 原文地址:https://www.cnblogs.com/forward-985/p/13693007.html
Copyright © 2011-2022 走看看