邻接矩阵和邻接表的深度优先遍历

//风雨难洗心痕,沧桑不灭情伤。莫要轻言亘古,离散才看荒凉。


#include "stdio.h"
typedef char Vertextype;  //顶点
typedef int EdgeType;  //边的权值
typedef int Boolean;
Boolean visited[MAXVEX];//访问标志的数组
#define MAXVEX 100
#define INFINITY 65535






//邻接矩阵
typedef struct
{
Vertextype vexs[MAXVEX];  //顶点表
EdgeType arc[MAXVEX][MAXVEX];//邻接矩阵,可以看做边表
int numvertexes, numEdges;  //当前的顶点和边数
}MGraph;




void DFS(MGraph G, int)
{
int i;
visited[MAXVEX] = true;
printf("%c", 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(G, i);
}
}








//邻接表
typedef struct EdgeNode  //边表结点
{
int adjvex;//邻接顶点
EdgeType weight;  //存储权值
struct EdgeNode *next;//用来指向下一个邻接点
}EdgeNode;


typedef struct VertexNode  //顶点表结点
{
Vertextype data;//顶点
EdgeNode *firstedge;//边表头指针
}VertexNode, AdjList[MAXVEX];


typedef struct
{
AdjList adjList;
int numVertexes, numEdgES;//当前的顶点和边
}GraphAdjList;




void DFS1(GraphAdjList GL, int i)
{
EdgeNode *p;
visited[i] = true;
printf("%c", GL.adjList[i].data);
p = GL.adjList[i].firstedge;
while (p)
{
if (!visited[p->adjvex])
DFS1(GL, i);
p = p->next;
}
}


void DFSTraverse1(GraphAdjList GL)
{
int i;
for ( i = 0; i < GL.numVertexes; i++)
{
visited[i] = false;
}
for ( i = 0; i < GL.numVertexes; i++)
{
if (!visited[i])
DFS1(GL, i);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章