• 邻接矩阵表示图


    图常用两种方式表示,邻接矩阵、邻接表。






















    0、结构初始化

    struct GraphNode {
        int Nv; /* 顶点数 */
        int Ne; /* 边数   */
        WeightType G[maxVertexNum][maxVertexNum];
        ElementType data[maxVertexNum]; /* 存顶点的数据 */
    };
    struct EdgeNode {
        int v1,v2; /* 有向边 */
        WeightType weight; /* 权重 */
    };
    

    1、图的初始化

    //初始化一个有vertexNum个顶点,但是没有边的图
    struct GraphNode* createGraph(int vertexNum) {
        struct GraphNode* Graph;
        Graph=(struct GraphNode*)malloc(sizeof(struct GraphNode));
        Graph->Nv=vertexNum;
        Graph->Ne=0;
    
        /* 默认编号从顶点0开始 */
        for (int i=0;i<Graph->Nv;i++) {
            for (int j=0;j<Graph->Nv;j++) {
                Graph->G[i][j]=0;
            }
        }
    
        return graph;
    }
    

    2、向图中插入边

    void insertEdge(struct GraphNode* graph,struct EdgeNode* E) {
        Graph->G[E->v1][E->v2]=E->weight;
        /* 如果是无向图,还要插入边<v2,v2> */
        Graph->G[E->v2][E->v1]=E->weight;
    }
    

    3、完整建立一个Graph-1

    struct GraphNode* buildGraph() {
        struct GraphNode* Graph;
        struct EdgeNode* E;
        int Nv;
    
        scanf("%d",&Nv);
        Graph=createGraph(Nv);
        scanf("%d",&Ne);
        if (Graph->Ne!=0) {
            E=(struct EdgeNode*)malloc(sizeof(struct EdgeNode));
            for (int i=0;i<Ne;i++) {
                scanf("%d %d %d",E->v1,E->v2,E->weight);
                insertEdge(Graph,E);
            }
        }
        /* 如果顶点有数据的话存入数据 */
        for (int j=0;j<Nv;j++) {
            scanf("%c",&(Graph->data[j]));
        }
    
        return Graph;
    }
    

    4、完整建立一个Graph-2(简化版本)

    int G[maxNum][maxNum],Nv,Ne;
    void buildGraph() {
        int v1,v2,weight;
    
        scanf("%d",Nv);
        for (int i=0;i<Graph->Nv;i++) {
            for (int j=0;j<Graph->Nv;j++) {
                Graph->G[i][j]=0;
            }
        }
        scanf("%d",Ne);
        for (int k=0;k<Ne;k++) {
            scanf("%d %d %d",&v1,&v2,&weight);
        }
    
        G[v1][v2]=weight;
        G[v2][v2]=weight;
    }
    


  • 相关阅读:
    BZOJ 1630/2023 Ant Counting 数蚂蚁
    BZOJ 3997 组合数学
    BZOJ 2200 道路与航线
    BZOJ 3181 BROJ
    BZOJ 4011 落忆枫音
    BZOJ 4027 兔子与樱花
    vijos 1741 观光公交
    vijos 1776 关押罪犯
    vijos 1780 开车旅行
    5、异步通知机制
  • 原文地址:https://www.cnblogs.com/WakingUp/p/8543475.html
Copyright © 2020-2023  润新知