/*
* 邻接矩阵方法创建无向带权图
* Date: 2021/10/20
* Author: xxw
* */
#include<bits/stdc++.h>
#define N 20 // 最大顶点数
using namespace std;
// 图的数据结构
typedef struct {
int vexs[N]; // 顶点表
int arcs[N][N]; // 邻接矩阵(二维数组)
int vexnum, arcnum; // 图当前点数和边数
}Graph;
// 查找位置
int locateVex(Graph g, int v) {
for (int i = 0; i < g.vexnum; ++i) {
if (g.vexs[i] == v) return i;
}
return -1;
}
// 创建无向带权图
void creatGraph(Graph &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.arcnum; ++j) {
g.arcs[i][j] = INT_MAX;
}
}
// 构造邻接矩阵
for (int k = 0; k < g.arcnum; ++k) {
int v1, v2, w; //v1, v2为两个顶点 w为边<v1,v2>的权值
cin>>v1>>v2>>w; //输入一条边所依附的顶点及边的权值
int i = locateVex(g, v1);
int j = locateVex(g, v2); //确定v1 v2在G中的位置(即v1 v2在顶点表中的下标)
g.arcs[i][j] = w; // 边<v1,v2>的权值为w
g.arcs[j][i] = w; // 因为是无向图,所以置<v2,v1>的权值也为w
}
return ;
}
int main() {
Graph g;
creatGraph(g);
return 0;
}
使用邻接矩阵创建无向带权图 (C++)
最新推荐文章于 2022-07-01 09:16:42 发布