无向图邻接矩阵(C++ 代码)

#include<iostream>//无向图邻接矩阵
#define mvnum 100
using namespace std;
typedef char Vertextype;//顶点数据类型
typedef int Arctype;//边权值类型
typedef struct
{
	Vertextype vexs[mvnum];//顶点表
	Arctype arcs[mvnum][mvnum];//邻接矩阵
	int vexnum, arcnum;//当前图的点数和边数
}AMGraph;
int Locatevex(AMGraph G, Vertextype u)//在G图中查找顶点u,存在则返回顶点表中的下标,否则返回-1
{
	for (int i = 0; i < G.vexnum; i++)
		if (u == G.vexs[i]) return i;
	return -1;
}
bool Creategraph(AMGraph& G)
{
	cin >> G.vexnum >> G.arcnum;//输入总顶点数,总边数
	for (int i = 0; i <G.vexnum; i++)
	{
		cin >> G.vexs[i];//依次输入点的信息
	}
	for (int i = 0; i < G.vexnum; i++)//初始化邻接矩阵
		for (int j = 0; j < G.vexnum; j++)
			G.arcs[i][j] = 0;
	for (int k = 0; k < G.arcnum; k++)//构造邻接矩阵
	{
		Vertextype v1, v2;
		int w;
		cin >> v1 >> v2 >> w;//输入一条边的顶点及边的权值
		int i = Locatevex(G, v1);
		int j = Locatevex(G, v2);//确定v1和v2在G中的位置
		G.arcs[i][j] = w;//边<v1,v2>的权值置为w
		G.arcs[j][i] = G.arcs[i][j];//无向图是对称图
	}
	return 1;
}
void Print(AMGraph G)
{
	for (int i = 0; i < G.vexnum; i++)
	{
		for (int j = 0; j < G.arcnum; j++)
			cout << G.arcs[i][j] <<" ";
		cout << endl;
	}
}
int main()
{
	AMGraph G;
	Creategraph (G);
	Print(G);
}

猜你喜欢

转载自blog.csdn.net/qq_74156152/article/details/132254424
今日推荐