zoukankan      html  css  js  c++  java
  • 图的三种存储方式

    之前总结过一次。详见本博客或者是另一篇

    不过呢。写起来。还是今天的简单易写(学长教的)。

    测试数据my.txt.

    邻接矩阵:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXN 100
    
    const int INF = (1<<23);
    
    int G[MAXN][MAXN];
    
    int main(){
        //freopen("d:\\my.txt", "r", stdin);
        int n, m, i, j, u, v, w;
    
        scanf("%d %d", &n, &m);
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
                G[i][j] = INF;
    
        for(i=0; i<m; i++){
            scanf("%d %d %d", &u, &v, &w);
            G[u][v] = G[v][u] = w;  //无向图
        }
    
        for(i=1; i<=n; i++){
            printf("与%d相关联的顶点有:\n", i);
            for(j=1; j<=n; j++)if(G[i][j] != INF){
                printf("%d ", j);
            }
            putchar('\n');
        }
    
    
        return 0;
    }

    边表:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXM 100    //最大边数
    #define MAXN 10   //最大顶点数
    struct node{
        int v, w;
        int next;
    }g[MAXM];
    
    int head[MAXN], t;
    
    void Init(){
        t = 0;
        memset(head, -1, sizeof(head));
    }
    
    void add(int u, int v, int w){
        g[t].v = v;
        g[t].w = w;
        g[t].next = head[u];
        head[u] = t;
        t++;
    }
    
    
    
    int main(){
        //freopen("d:\\my.txt", "r", stdin);
        int n, m, i, j, u, v, w;
        scanf("%d %d", &n, &m);
        Init();

    for(i=0; i<m; i++){ scanf("%d %d %d", &u, &v, &w); add(u, v, w); add(v, u, w); //因为该图为无向图 }
    for(i=1; i<=n; i++){ printf("与%d相关联的顶点有:\n", i); for(j=head[i]; j != -1; j=g[j].next){ printf("%d ", g[j].v); } putchar('\n'); } return 0; }

    邻接表(动态):

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXN 100
    
    struct node{
        int v, w;
        struct node *next;
    }*head[MAXN];
    
    void Init(){
        memset(head, 0, sizeof(head));
    }
    
    void add(int u, int v, int w){
        struct node *p = (struct node *)malloc(sizeof(struct node));
        p->v = v;
        p->w = w;
        p->next = head[u];
        head[u] = p;
    }
    
    int main(){
        //freopen("d:\\my.txt", "r", stdin);
        int n, m, i, u, v, w;
        scanf("%d %d", &n, &m);
        Init();
        for(i=0; i<m; i++){
            scanf("%d %d %d", &u, &v, &w);
            add(u, v, w);
            add(v, u, w);   //双向
        }
    
        for(i=1; i<=n; i++){
            printf("与%d相关联的顶点有:\n", i);
            struct node *p;
            for(p=head[i]; p != NULL; p = p->next){
                printf("%d ", p->v);
            }
            putchar('\n');
        }
    
        return 0;
    }

    邻接表(静态):

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAXN 100
    #define MAXM 10000
    
    struct node{
        int v, w;
        struct node *next;
    }*head[MAXN];
    
    struct node mem[MAXM];
    int t;
    
    void Init(){
        t = 0;
        memset(head, 0, sizeof(head));
    }
    
    void add(int u, int v, int w){
        struct node *p = &mem[t++];
        p->v = v;
        p->w = w;
        p->next = head[u];
        head[u] = p;
    }
    
    int main(){
        freopen("d:\\my.txt", "r", stdin);
        int n, m, i, u, v, w;
        scanf("%d %d", &n, &m);
        Init();
        for(i=0; i<m; i++){
            scanf("%d %d %d", &u, &v, &w);
            add(u, v, w);
            add(v, u, w);   //双向
        }
        for(i=1; i<=n; i++){
            printf("与%d相关联的顶点有:\n", i);
            struct node *p;
            for(p=head[i]; p != NULL; p = p->next){
                printf("%d ", p->v);
            }
            putchar('\n');
        }
        return 0;
    }

    运行结果:

  • 相关阅读:
    redis 篇
    redis 篇
    Url 简单讲解
    django 分组统计遇见的问题
    Django REST framework 自定义字段
    python 之 MRO 异常
    redis中的事务、lua脚本和管道的使用场景
    不实例化一个 class 的时候使用它的property
    转载牛人的英语学习方法,值得学习
    2017年值得学习的3个CSS特性
  • 原文地址:https://www.cnblogs.com/tanhehe/p/2921864.html
Copyright © 2011-2022 走看看