• STL存储邻接表


    用到了c++的STL 来存储邻接表

    参考网站:https://www.cnblogs.com/yzm10/p/7235501.html

    /*
        STL中的vector实现邻接表
        2020.4.27
        参考网址:https://www.cnblogs.com/yzm10/p/7235501.html
    */
    
    #include <iostream>
    #include <vector>
    #include <cstdlib>
    #define MAX 10000
    using namespace std;
    
    struct EdgeNode{ //边表节点类型
        int to, w; //顶点序号和边长
    };
    vector<EdgeNode> map[MAX];
    
    int main(){
        EdgeNode e;
        int n, m, i, j, k, w;
        cin >> n >> m; //n个顶点m组数据
    
        for(i = 0; i < m; ++i){
            cin >> j >> k >> w;
            e.to = k; e.w = w;
            map[j].push_back(e);
        }
    
        //遍历
        for(i = 1; i <= n; ++i){
            for(vector<EdgeNode>:: iterator k = map[i].begin();
            k != map[i].end(); ++k){
                EdgeNode t = *k;
                cout << i << ' ' << t.to << ' ' << t.w << endl;
            }
        }
        system("pause");
        return 0;
    }

    强化训练 

     QDUOJ 生化危机 邻接表+BFS

    参考网址 https://www.cnblogs.com/yzm10/p/7236210.html

    #include<stdio.h>
    #include<string.h>
    #include<vector>
    #include<queue>
    
    using namespace std;
    
    struct Node{
        int x,s;//s表示第几天感染的城市数量
    }node;
    
    int main()
    {
        int t,n,k,x,y,tx,cc,c,i;
        int a[10005],b[10005];
        queue<Node> q;
        vector<int> v[10005];
        scanf("%d",&t);
        while(t--){
            scanf("%d%d",&n,&k);
            for(i=1;i<=n;i++){
                v[i].clear();
            }
            for(i=1;i<n;i++){
                scanf("%d%d",&x,&y);
                v[x].push_back(y);
                v[y].push_back(x);
            }
            memset(a,0,sizeof(a));
            memset(b,0,sizeof(b));
            b[k]=1;
            node.x=k;
            node.s=1;
            q.push(node);
            cc=0;c=1;
            while(q.size()){
                if(a[q.front().s]==0){
                    a[++cc]=c;
                    c=0;
                }
                for(i=0;i<v[q.front().x].size();i++){   //切记从0开始
                    tx=v[q.front().x][i];
                    if(b[tx]==0){
                        c++;
                        b[tx]=1;
                        node.x=tx;
                        node.s=q.front().s+1;
                        q.push(node);
                    }
                }
                q.pop();
            }
            printf("%d
    ",cc);
            for(i=1;i<=cc;i++){
                printf("%d ",a[i]);
            }
            printf("
    ");
        }
        return 0;
    }

     

  • 相关阅读:
    Web应用程序并发问题处理的一点小经验
    *.pvr.ccz文件还原成png格式
    在python 中is和= = 的区别
    pyhton,数据类型
    python,序列化
    python, 操作文件和目录
    python文件,字符串,二进制的读写
    io编程,python
    python,错误、调试和测试
    python,多线程
  • 原文地址:https://www.cnblogs.com/someonezero/p/12784866.html
Copyright © 2020-2023  润新知