基于邻接矩阵的新顶点的增加
#include <iostream>
#include <cstring>
using namespace std;
#define MaxNum 100 //最大顶点数
typedef struct {
int vexs[MaxNum]; //顶点表
int arcs[MaxNum][MaxNum];//邻接矩阵 边表
int vexNum,arcNum; //当前顶点数,弧数
}MGraph;
/**
* 构建无向图
* @param n 顶点数
* @param m 边数
* @return
*/
//初始化图
void InitGraph(MGraph &G){
G.vexNum = 0;
G.arcNum = 0;
memset(G.vexs,0,sizeof(G.vexs));
memset(G.arcs,0,sizeof(G.arcs));
}
MGraph CreateGraph(int n,int m){
MGraph G;
InitGraph(G);
//构造顶点
for(int i = 1;i<=n;i++){
G.vexs[i] = i;
G.vexNum++;
}
//输入边
int v1,v2;
for(int i = 1;i<=m;i++){
cin>>v1>>v2;
G.arcs[v1][v2] = G.arcs[v2][v1] = 1;
}
//增加新顶点
int new_vex;
cin>>new_vex;
G.vexs[++G.vexNum] = new_vex;
return G;
}
void OutPutGraph(MGraph G){
cout<<"0";
for(int i = 1;i<=G.vexNum;i++) cout<<" "<<G.vexs[i];
cout<<endl;
for(int i = 1;i<=G.vexNum;i++){
cout<<G.vexs[i];
for(int j =1;j<=G.vexNum;j++){
cout<<" "<<G.arcs[i][j];
}
cout<<endl;
}
}
int main(){
int n,m;
cin>>n>>m;
while(!(n==0 && m == 0)){
MGraph G = CreateGraph(n,m);
OutPutGraph(G);
cin>>n>>m;
}
return 0;
}