1.图的数据结构采用邻接矩阵表示法为
#define MAXVEX 100
typedef int Boolean; /*Boolean是布尔类型,其值是TRUE或FALSE*/
Boolean visited[MAXVEX]; /*访问标志的数组*/
typedef struct MGraph
{
VertexType vexs[MAXVEX]; /*顶点表*/
EdgeType arc[MAXVEX][MAXVEX]; /*领结矩阵,可看作边表*/
int numVertexes, numEdges; /*图中当前的定点数和边数*/
}MGraph;
2.算法
/*邻接矩阵的深度优先递归算法*/
void DFS(MGraph& G,int i)
{
visited[i] = true;
cout << G.vexs[i] << " ";
for (int j = 0; j < G.numVertexes; j++)
if (G.arc[i][j] == 1&&!visited[j])
DFS(G,j);
}
/*邻接矩阵的深度优先遍历*/
void DFSTraverse(MGraph& G)
{
int i;
for (i = 0; i < G.numVertexes; i++)
visited[i] = false; /*初始化所有顶点状态都是未访问过的状态*/
for (i = 0; i < G.numVertexes; i++)
if (!visited[i]) /*对未访问过的顶点调用DFS*/
DFS(G, i);
}
3.图的结构是邻接表的结构
typedef char VertexType; /*顶点类型由用户定义*/
typedef int EdgeType; /*边上的权值类型应由用户定义*/
typedef struct EdgeNode /*边表结点*/
{
int adjvex; /*邻接点域,存储该顶点对应的下标*/
EdgeType weight; /*用于存储权值,对于非网图可以不需要*/
struct EdgeNode *next; /*链域,指向下一个邻接点*/
}EdgeNode;
typedef struct VertexNode
{
VertexType data; /*邻接点域*/
EdgeNode *firstedge; /*边表头指针*/
}VertexNode,AdjList[MAXVEX];
typedef struct GraphAdjList
{
AdjList adjlist;
int numVertexes, numEdges; /*图中当前顶点数和边数*/
}GraphAdjList;
4.邻接表的深度优先遍历算法