#include<iostream>
using namespace std;
#define MAXVEX 100
typedef char VType;
typedef int EType;
typedef struct ENode
{
int Avex;
EType Weigh;
struct ENode *pNext;
}ENode;
typedef struct VNode
{
VType data;
ENode *pFirst;
}VNode,VNodeL[MAXVEX];
typedef struct
{
VNodeL VLnode;
int Vnums;
int Enums;
}ALGraph;
void CreateALGraph(ALGraph &G)
{
int i, j, k;
ENode *pE;
cin >> G.Vnums >> G.Enums;
for (i = 0; i < G.Vnums; ++i)
{
cin >> G.VLnode[i].data;
G.VLnode[i].pFirst = NULL;
}
for (k = 0; k < G.Enums; ++k)
{
cin >> i >> j;
pE = new ENode;
pE->Avex = i;
pE->pNext = G.VLnode[j].pFirst;
G.VLnode[j].pFirst = pE;
pE = new ENode;
pE->Avex = j;
pE->pNext = G.VLnode[i].pFirst;
G.VLnode[j].pFirst = pE;
}
}
bool VTag[MAXVEX];
void Visit(VType e)
{
cout << e << " ";
}
void DFS(ALGraph G,int i)
{
ENode *pE;
VTag[i] = true;
Visit(G.VLnode[i].data);
pE = G.VLnode[i].pFirst;
while (pE)
{
if (!VTag[pE->Avex])
DFS(G, pE->Avex);
pE = pE->pNext;
}
}
void DFSPrint(ALGraph G)
{
int i;
for (i = 0; i < G.Vnums; ++i)
VTag[i] = false;
for (i = 0; i < G.Vnums; ++i)
if (!VTag[i])
DFS(G, i);
}
int main(void)
{
ALGraph G;
CreateALGraph(G);
DFSPrint(G);
return 0;
}
数据结构之无向图的邻接表DFS(参考C博客—研究毛)
最新推荐文章于 2023-06-09 14:01:55 发布