深度遍历:第一次:A->F->G->H 发现 结点 6 访问过了指针移动
第二次:访问 结点4(E) ->D->I->C->B
广度遍历:注重次序
第一次:A 入队列 访问A A出队列,将 A 的所有未被访问的邻接点按照次序入队列 (F)(B) 入队
第二次:访问 F F出队列,将 F 所有的邻接点按照次序入队列
第三次:访问 B B出队列,将 B 所有的邻接点按照次序入队列
#include <iostream>
using namespace std;
/**
这里通过邻接矩阵来构建邻接表
**/
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXVEX 100
#define MAXSIZE 9 /* 存储空间初始分配量 */
typedef int Status;
typedef char VertexType;
typedef int EdgeType; // 权值
// 邻接矩阵结构
typedef struct{
VertexType vex[MAXVEX]; // 顶点表
EdgeType arc[MAXVEX][MAXVEX]; //邻接矩阵 边表
int numEdges = 15;
int numVertexes = 9;
}MGraph;
// 边表节点
typedef struct EdgeNode{
int adjvex; // 存储该顶点对应的下标
EdgeType info;
struct EdgeNode * next;
}EdgeNode;
// 顶点节点
typedef struct VertexNode{
// 统计每个顶点的入度
int in;
VertexType data;
EdgeNode * firstedge; // 第一个指向边表的指针
}VertexNode,AdjList[MAXVEX];
// 图的邻接表结构
typedef struct {
AdjList adjList;
int numNodes,numEdges;
}GraphAdjList,*GraphAdjListLink; // 定义邻接表的指针
/**********************/
/**
定义用到的数据结构队列
使用的是循环队列 (判断队列满的方法为差一个位置)
**/
typedef struct {
int data[MAXSIZE];