数据结构与算法一一图








二、图的存储结构<邻接矩阵>





三、图的存储结构<邻接表>





四、图的遍历






// ---------------------邻接矩阵存储结构------------------------

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);		// 将此顶点插入队列
					}
				}
			}
		}
	}

}
发布了149 篇原创文章 · 获赞 68 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/m0_37989980/article/details/80480003