//风雨难洗心痕,沧桑不灭情伤。莫要轻言亘古,离散才看荒凉。
#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);
}
}
#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);
}
}