#include <iostream>
using namespace std;
#define MAX 50
#define INFINITE 32767
//图的邻接矩阵表示
struct MGraph{
int vertexnum; //顶点的数量
int edgenum; //边的数量
char vertex[MAX]; //存储顶点的数组
int e[MAX][MAX]; //存储边权重的二维数组
};
int findvertex(MGraph G, char key);
//创建图
void createG(MGraph &G){
//1.先输入顶点数和顶点字符
cout<<"请输入顶点数:"<<endl;
cin>>G.vertexnum;
cout<<"请输入顶点字符:"<<endl;
for(int i=0; i<G.vertexnum; i++){
cin>>G.vertex[i];
}
//2.在输入边
cout<<"请输入边数:"<<endl;
cin>>G.edgenum;
//3.将边的数(也就是e中元素)初始化为无穷大
for(int i=0; i<G.vertexnum; i++){
for(int j=0; j<G.vertexnum; j++){
G.e[i][j] = INFINITE;//有权图初始化边为无穷大。无权图初始化为0
}
}
//4.修改已知边的权重
for(int i=0; i<G.edgenum; i++){
char k,j;//起点、终点
int w;//权重
cout<<"输入边,起点、终点、权重:例如 A B 10"<<endl;
cin>>k>>j>>w;
G.e[findvertex(G,k)][findvertex(G,j)] = w;
}
}
//遍历
void print(MGraph G){
for(int i=0; i<G.vertexnum; i++){
for(int j=0; j<G.vertexnum; j++){
cout<<G.e[i][j]<<" ";
}
cout<<endl;
}
}
//查找顶点是否存在
int findvertex(MGraph G, char key){
for(int i=0; i<G.vertexnum; i++){
if(G.vertex[i] == key){
return i; //如果存在返回顶点所在下标
}
}
return -1;
}
//增加顶点
void addvertex(MGraph &G, char ele){
G.vertex[G.vertexnum] = ele;
G.vertexnum++;
for(int i=0; i<G.vertexnum; i++){
G.e[i][G.vertexnum-1] = INFINITE; //初始化矩阵的最下一行
G.e[G.vertexnum-1][i] = INFINITE; //初始化矩阵的最右一行
}
}
//增加边
void addedge(MGraph &G){
cout<<"请输入起点 终点 权重:例如 0 1 9"<<endl;
int i,j,w;
cin>>i>>j>>w;
G.e[i][j] = w;//有向有权图
// G.e[j][i]=w;
G.edgenum++;
}
int main(){
MGraph G;
createG(G);
print(G);
cout<<"增加了一个顶点E findvertex(G,'E'):";
addvertex(G,'E');
addedge(G);
print(G);
return 0;
}
图---查找顶点是否存在、增加顶点、增加边
猜你喜欢
转载自blog.csdn.net/qq_42363032/article/details/104234198
今日推荐
周排行