BJFUOJ-275

本文介绍了一个基于邻接表的数据结构在C++中用于表示图,包括顶点和边的定义,以及如何动态地为图添加新顶点的方法。通过`CreateAlGraph`函数创建并初始化图,`OutPutAlGraph`用于输出图的信息。
摘要由CSDN通过智能技术生成

基于邻接表的新顶点的增加

#include <iostream>
using namespace std;
#define MaxNum 100
//边结点
typedef struct ArcNode{
    int adjVex; //该边指向的顶点
    ArcNode* next; //下一条边
    ArcNode():adjVex(0),next(nullptr){};
}ArcNode;
//顶点
typedef struct VNode{
    int data; //顶点信息
    ArcNode* first; //顶点的第一条边
}VNode;

typedef struct{
    VNode vexs[MaxNum]; //邻接表
    int vexNum;
    int arcNum;
}AlGraph;

AlGraph CreateAlGraph(int n,int m){
    AlGraph G;
    G.vexNum = 0;
    G.arcNum = 0;

    //初始化顶点
    for (int i = 0; i < n; ++i){
        G.vexs[i+1].data = i+1;
        G.vexs[i+1].first = nullptr;
        G.vexNum++;
    }

    //输入边
    int v1;int v2;
    for (int i = 0; i < m; ++i){
        cin>>v1>>v2;

        //构建边
        ArcNode* p = new ArcNode ;
        p->adjVex = v2;

        //加入边
        p->next = G.vexs[v1].first;
        G.vexs[v1].first = p;

        p = new ArcNode ;
        p->adjVex = v1;

        p->next = G.vexs[v2].first;
        G.vexs[v2].first = p;


        G.arcNum++;
    }

    //添加新顶点
    int new_node;
    cin>>new_node;
    G.vexs[++G.vexNum].data = new_node;
    G.vexs[G.vexNum].first = nullptr;


    return G;
}


void OutPutAlGraph(AlGraph G){
    for(int i = 0;i<G.vexNum;i++){
        cout<<G.vexs[i+1].data;
        ArcNode * p = G.vexs[i+1].first;
        while(p){
            cout<<" "<<p->adjVex;
            p = p->next;
        }
        cout<<endl;
    }
}

int main(){

    int n,m;
    cin>>n>>m;
    while(!(n == 0 && m ==0)){
        AlGraph G = CreateAlGraph(n,m);
        OutPutAlGraph(G);
        cin>>n>>m;
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值