实验内容:
1、键盘输入数据,建立一个有向图的邻接表。
2、输出该邻接表。
3、在有向图的邻接表的基础上计算各顶点的度,并输出。
4、以有向图的邻接表为基础实现输出它的拓扑排序序列。
5、采用邻接表存储实现有向图的深度优先递归遍历。
*6、采用邻接表存储实现有向图的广度优先遍历(利用队列实现)。
7、编写一个主函数,调试上述算法。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <stack>
#define INFMAX 9999999
#define MAXVEX 200
using namespace std;
typedef char VertexType;
typedef int EdgeType;
int visited[INFMAX];
typedef struct EdgeNode /* 边表结点 */
{
int adjvex; /* 邻接点域,存储该顶点对应的下标 */
EdgeType info; /* 用于存储权值,对于非网图可以不需要 */
struct EdgeNode *next; /* 链域,指向下一个邻接点 */
}EdgeNode;
typedef struct VertexNode /* 顶点表结点 */
{
VertexType data; /* 顶点域,存储顶点信息 */
EdgeNode *firstedge;/* 边表头指针 */
}VertexNode, AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numNodes,numEdges; /* 图中当前顶点数和边数 */
}GraphAdjList;
void CreateALGraph(GraphAdjList *G)
{
int i,j,k,weight;
EdgeNode *e;
cout<<"输入顶点数和边数:";
cin>>G->numNodes>>G->numEdges; /* 输入顶点数和边数 */
for(i = 0;i < G->numNodes;i++) /* 读入顶点信息,建立顶点表 */
{
&n