图---查找顶点是否存在、增加顶点、增加边

在这里插入图片描述

#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;
}

在这里插入图片描述

发布了213 篇原创文章 · 获赞 104 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42363032/article/details/104234198