基于邻接表的新顶点的增加
#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;
}