zoukankan      html  css  js  c++  java
  • 图的邻接表表示法 (非指针实现)


    图的邻接表表示法(一)
    邻接表储存图结构本质上是将图上的每条边都储存起来 我们希望通过边被添加的顺序序号来储存边 假设(1,2)是第一条被添加的边,(1,4)是第四条,(1,3)是第五条,他们是关联1的所有边 即edge[0].u=1;edge[0].v=2 edge[3].u=1;edge[3].v=4 edge[4].u=1;edge[4].v=5 我们希望 edge[0].next=-1; edge[3].next=0; edge[4].next=3; head[1]=4; 从而实现链式顺序

    下面给出完整的邻接表模板
    //邻接表模板
    const int maxe;
    const int maxv;
    
    struct graph{
        int ne,nv;
        int head[maxe];
        struct edgenode{
            int v,w,next;
        }edge[maxe]; 
        
        void addedge(int u,int v,int w){
            edge[ne].v=v;
            edge[ne].w=w;
            edge[ne].next=head[u];
            head[u]=ne++;
            //建立反向边 
            edge[ne].v=u;
            edge[ne].w=w; //假设反向边的权值相同 
            edge[ne].next=head[v];
            head[v]=ne++;
        }
        
        void build(int n,int e){
            nv=n;
            memset(head,-1,sizeof(head));
            ne=0;
            int x,y,z;
            for(int i=0;i<e;i++)
            {
                cin>>x>>y>>z;
                x--;y--;       //表示图的下标从0开始 
                addedge(x,y,z);
            }
        }
    }g;
    
    
    
     

    图的邻接表表示法二(用vector更简单的表示法)

    一条边(u,v)的表示
    graph[u][ 0--adj[u] ]=v;

    //由于该方法只储存邻接顶点而未储存边,所以此方法在带权图中不适用
    #include<vector> vector<int>graph[n];
    int adj[n];
    void addedge( int u,int v,int w ){   graph[u].push(v);
      adj[u]
    ++; } //取得u的邻接节点 for(int i=0;i<adj[u];i++
    ){   visit(graph[u][i]); }

  • 相关阅读:
    新建立了个集邮 Blog
    删除8848的mysearch
    VS2005的中国发布会
    免费的PDF生成工具
    FreeBASIC
    今天收到了WinZip发来的免费License
    简洁的 Bash 编程技巧
    benhuan039sblog.wordpress.20121111.xml_.txt
    新浪微博除掉推荐微博
    自制力也是一种力量
  • 原文地址:https://www.cnblogs.com/neverchanje/p/3536910.html
Copyright © 2011-2022 走看看