邻接矩阵的深度优先遍历:
typedef int Boolean;
Boolean visited[MAXVEX];
void DFS(MGraph G, int i)
{
int j;
visited[i] = 1;
printf("%c ", G->vexs[i]);
for (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] = 0;
for (i = 0; i < G->numVertexes; i++)
if (!visited[i])
DFS(G, i);
}
邻接矩阵的广度优先遍历
void BFSTraverse(MGraph G)
{
int i, j;
Queue Q;
for (i = 0; i < G.numVertexes; i++)
visited[i] = 0;
InitQueue(&Q);
for(i = 0; i < G.numVertexes; i++)
if (!visited[i])
{
visited[i] = 1;
printf("%c ", G->vexs[i]);
EnQueue(&Q, i);
while (!QueueEmpty(Q))
{
DeQueue(&Q, &i);
for (j = 0; j < G.numVertexes; j++)
{
if (G.arc[i][j] == 1 && !visited[j])
{
visited[j] = 1;
printf("%c ", G->vexs[j]);
EnQueue(&Q, j);
}
}
}
}
}
邻接表的深度优先遍历
typedef int Boolean;
Boolean visited[MAXVEX];
void DFS(GraphAdjList GL, int i)
{
EdgeNode* p;
visited[i] = 1;
printf("%c ", GL->adjList[i].data);
p = adjList[i].firstedge;
while (p)
{
if (!visit[p->adjvex])
DFS(GL, p->adjvex);
p = p->next;
}
}
void DFSTraverse(GraphAdjList GL)
{
int i;
for (i = 0; i < GL->numVertexes; i++)
visited[i] = 0;
for (i = 0; i < GL->numVertexes; i++)
if (!visited[i])
DFS(GL, i);
}
邻接表的广度优先遍历
void BFSTraverse(GraphAdjList GL)
{
int i, j;
EdgeNode* p;
Queue Q;
for (i = 0; i < GL.numVertexes; i++)
visited[i] = 0;
InitQueue(&Q);
for (i = 0; i < GL.numVertexes; i++)
if (!visited[i])
{
visited[i] = 1;
printf("%c ", GL->adjList[i].data);
EnQueue(&Q, i);
while (!QueueEmpty(Q))
{
DeQueue(&Q, &i);
p = GL_adjList[i].firstedge;
while (p)
{
if (!visited[p->adjvex])
{
visited[p->adjvex] = 1;
printf("%c ", GL->adjList[p->adjvex].data);
EnQueue(&Q, p->adjvex);
}
p = p->next;
}
}
}
}