结构分析:
邻接矩阵
|
邻接矩阵
|
算法思想:
- 输入总顶点数和总边数
- 一次输入顶点休息存于顶点表
- 初始化邻接矩阵,每个权值为极大值
- 构造邻接矩阵
存储表示:
#define MaxInt 32767
#define MVNum 100
typedef char VerTexType;
typedef int ArcType;
typedef struct
{
VerTexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum, arcnum;
}AMGraph;
算法实现:
Status CreateUDN(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] = MaxInt;
for (int k = 0; k < G.vexnum; ++k)
{
char v1, v2, w;
cin >> v1 >> v2 >> w;
int i = LocateVex(G, v1);
int j = LocateVex(G, v2);
G.arcs[i][j] = w; G.arcs[j][i] = w;
}
return 0;
}
int LocateVex(AMGraph G, VerTexType u)
{
int i;
for (int i = 0; i < G.vexnum; ++i)
if (u == G.vexs[i]) return i;
return -1;
}
邻接矩阵优缺点:
- 优点:
- 直观、简单、好理解
- 方便检查任意两点间是否有边
- 方便找任一顶点的所有邻接点
- 方便 计算顶点的度
- 缺点
- 不利于增删顶点
- 浪费空间-稀疏图(点多边少)有大量无效元素,但对稠密图(完全图)还是很合算的
- 浪费时间-统计图中共有多少条边
- 存储空间为O(n²)
【C++】图的构造算法-邻接表表示法