二、图的存储结构<邻接矩阵>
三、图的存储结构<邻接表>
四、图的遍历
// ---------------------邻接矩阵存储结构------------------------
typedef char VertexType; // 顶点类型
typedef int EdgeType; // 边上的权值类型
#define MAXVEX 100 // 最大顶点数
#define INFINITY 65535 // 用 65535 代表无穷
typedef struct
{
VertexType vexs[MAXVEX]; // 用来存顶点的数组
EdgeType arc[MAXVEX][MAXVEX]; // 邻接矩阵, 可看作边表
int numVertexes, numEdges; // 图中当前的顶点数和边数
} MGraph;
// 邻接矩阵的广度遍历算法
void BFSTraverse (MGraph G)
{
int i, j;
int visited[50];
Queue Q; // 创建一个队列
// 遍历顶点
for (i = 0; i < G.numVertexes; ++i)
{
// 给所有顶点是否被访问过作标志
visited[i] = FALSE;
}
// 初始化队列
initQueue( &Q );
for (i = 0; i < G.numVertexes; ++i)
{
// 如果没有访问过的顶点
if (!visited[i])
{
printf("%c\n", G.vexs[i]); // 打印顶点
visited[i] = TRUE; // 将顶点昨个访问标记
EnQueue(&Q, i); // 将此顶点插入队列
// 如果当前队列不为空
while( !QueueEmpty(Q))
{
// 将队中元素出队列, 赋值给i
DeQueue(&Q, &i);
for (j = 0; j < G.numVertexes; ++j)
{
// 判断其他顶点若与当前顶点存在边且未访问过
if (G.arc[i][j] == 1 && !visited[j])
{
printf("%c\n", G.vexs[j]); // 打印顶点
visited[j] = TRUE; // 将顶点昨个访问标记
EnQueue(&Q, j); // 将此顶点插入队列
}
}
}
}
}
}