#include<iostream>
using namespace std;
#define OK 0;
//图的邻接矩阵存储表示
#define MaxInt 32767
#define MVNum 100
typedef char VerTextType;
typedef int ArcType;
typedef int Status;
typedef struct
{
VerTextType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum, arcnum;
}AMGraph;
int LocateVex(AMGraph G, VerTextType u)
{
int i;
for (i = 0; i < G.vexnum; ++i)
if (u == G.vexs[i])
return i;
return -1;
}
Status CreateUDN(AMGraph &G)//图的创建
{
int i,j;
int k= 0;
cin >> G.vexnum >> G.arcnum;
for (i = 0; i < G.vexnum; ++i)
cin >> G.vexs[i];
for (i = 0; i < G.vexnum; ++i)
for (j = 0; j < G.arcnum; ++j)
G.arcs[i][j] = 0;
for (k = 0; k < G.arcnum; ++k)
{
char v1, v2;
int w;
cin >> v1 >> v2>>w;
i = LocateVex(G, v1);
j = LocateVex(G, v2);
G.arcs[i][j] = w;
G.arcs[j][i] = G.arcs[i][j];
}
return OK;
}
bool visited[MVNum];
void DFS(AMGraph G, int v)
{
int w;
cout << G.vexs[v];
visited[v] = true;
for (w = 0; w < G.vexnum; w++)
if ((G.arcs[v][w] != 0) && (!visited[w])) DFS(G, w);
}
void DFSTraverse(AMGraph G)//深度优先遍历
{
int v = 0;
for (v = 0; v < G.vexnum; ++v)visited[v] = false;
for (v = 0; v < G.vexnum; ++v)
if (!visited[v]) DFS(G,v);
}
int main()
{
AMGraph G;
cout << "请输入:" << endl;
CreateUDN(G);
cout << "深度优先遍历的结果为:" << endl;
DFSTraverse(G);
return 0;
}
【C++】图的深度优先遍历
最新推荐文章于 2024-05-20 15:46:15 发布