0 回顾数据结构逻辑

1 图的定义和基本术语

必须有顶点,可以没有边。

Cn2和2*Cn2(数学上的,n个顶点取2个顶点)










概念有些多。。。。。。
2 图的定义



3 图的存储结构


无向图的邻接矩阵

有向图的邻接矩阵

网(有权图)的邻接矩阵

邻接矩阵
邻接矩阵的存储表示:用两个数组分别存储顶点表和邻接矩阵
#define MaxInt 32767 // 表示极大值,即∞
#define MVNum 100 // 最大顶点数
typedef char VerTexType; // 设顶点的数据类型为字符型
typedef int ArcType; // 假设边的权值类型为整型
typedef struct {
VerTexIype vexs[MVNum]; // 顶点表
ArcType arcs[MVNum][MVNum]; // 邻接矩阵
int vexnum, arcnum; // 图的当前点数和边数
} AMGraph;
// Adjacency Matrix Graph
2、采用邻接矩阵表示法创建无向网

【算法思想】
(1)输入总顶点数和总边数;
(2)依次输入点的信息存入顶点表中;
(3)初始化邻接矩阵,使每个权值初始化为极大值;
(4)构造邻接矩阵。
创建无向网
void CreatUDN(AMGraph &G)
{
// 第一步:输入无向图的顶点数目
cout << "input num" << endl;
cin >> G.arcnum >> G.arcnum; // 输入总顶点数和总边数
// 第二步:输入结点的名称,保存在一维数组中
cout << "input vexs" << endl;
for (int i = 0; i < G.vexnum; ++i)
{
cin >> G.vexs[i];
}
// 第三步:将邻接矩阵的元素值置为无穷大
for (int i = 0; i < G.arcnum; ++i)
{
for (int j = 0; j < G.arcnum; ++j)
{
G.arcs[i][j] = INT32_MAX;
}
}
// 第四步:输入顶点相互关系以及权重
for (int k = 0; k < G.arcnum; ++k)
{
int i, j, weight;
char a, b;
cin >> a >> b >> weight;
// 由输入的顶点a和b查找到对应的下标i,j
i = LocateVex(G, a);
j = LocateVex(G, b);
G.arcs[i][j] = G.arcs[j][i] = weight;
}
}
邻接矩阵的LocateVex函数
int LocateVex(AMGraph &G, const char &e)
{
for (int i = 0; i < G.vexnum; ++i)
{
if(G.vexs[i] == e)
return i;
}
return -1;
}









![[C++11] 类中新特性的添加](https://img-blog.csdnimg.cn/img_convert/3fde8fc69e1fbf19233ab088f5020a1b.png)











