データ構造_7:図アルゴリズム:図の遍歴
7554 ワード
DFS-深さ優先ループは、 を順次巡回するのと同様である.受領表マトリクス方式 受領表DFS
広さ優先ループツリーに似た階層 隣接行列のBFS 受領表BFS
typedef int Boolean;
Boolean visited[MAX]; //
//
void DFS(MGraph G,int i)
{
int j;
visited[i]=TRUE;
printf("%c",G.vexs[i]); // ,
for(j=0;j<G.numVertextes;j++)
if(G.arc[i][j]==1 && !visited[j])
DFS(G,j); // DFS
}
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);
}
void DFS(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])
DFS(GL, p->adjvex);/* */
p = p->next;
}
}
/* */
void DFSTraverse(GraphAdjList GL)
{
int i;
for(i = 0; i < GL->numVertexes; i++)
visited[i] = FALSE; /* */
for(i = 0; i < GL->numVertexes; i++)
if(!visited[i]) /* DFS, , */
DFS(GL, i);
}
広さ優先ループ
/* */
void BFSTraverse(MGraph G)
{
int i, j;
Queue Q;
for(i = 0; i < G.numVertexes; i++)
visited[i] = FALSE;
InitQueue(&Q); /* */
for(i = 0; i < G.numVertexes; i++) /* */
{
if (!visited[i]) /* */
{
visited[i]=TRUE; /* */
printf("%c ", G.vexs[i]);/* , */
EnQueue(&Q,i); /* */
while(!QueueEmpty(Q)) /* */
{
DeQueue(&Q,&i); /* , i */
for(j=0;j<G.numVertexes;j++)
{
/* */
if(G.arc[i][j] == 1 && !visited[j])
{
visited[j]=TRUE; /* */
printf("%c ", G.vexs[j]); /* */
EnQueue(&Q,j); /* */
}
}
}
}
}
}
void BFSTraverse(GraphAdjList GL)
{
int i;
EdgeNode *p;
Queue Q;
for(i = 0; i < GL->numVertexes; i++)
visited[i] = FALSE;
InitQueue(&Q);
for(i = 0; i < GL->numVertexes; i++)
{
if (!visited[i])
{
visited[i]=TRUE;
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]=TRUE;
printf("%c ",GL->adjList[p->adjvex].data);
EnQueue(&Q,p->adjvex); /* */
}
p = p->next; /* */
}
}
}
}
}