1.完整代码
#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define MaxInt 0
#define MVNum 100
#define Max 20
typedef char VerTexType;
typedef int ArcType;
typedef int Status;
typedef struct{
VerTexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum, arcnum;
}AMGraph;
Status LocateVex(AMGraph G, VerTexType u)
{
for(int i = 0; i < G.vexnum; ++i)
{
if( u == G.vexs[i] )
return i;
}
}
Status CreatUDN(AMGraph &G)
{
VerTexType v1, v2;
int w;
cout << "输入总顶点数: " << endl;
cin >> G.vexnum;
cout << "输入总边数: "<< endl;
cin >> G.arcnum;
cout << "请输入所有顶点:" << endl;
for(int i = 0; i < G.vexnum; ++i)
{
cin >> G.vexs[i];
}
for(int i = 0; i < G.vexnum; ++i)
{
for(int j = 0; j < G.vexnum; ++j)
{
G.arcs[i][j] = MaxInt;
}
}
cout << "分别输入一条边依附的两个顶点和权值:" << endl;
for(int k = 0; k < G.arcnum; ++k)
{
cin >> v1 >> v2 >> w;
int m = LocateVex(G, v1);
int n = LocateVex(G, v2);
G.arcs[m][n] = w;
G.arcs[n][m] = w;
}
return OK;
}
void PrintVex(AMGraph G)
{
cout << " ";
for (int i = 0;i < G.vexnum;i++)
{
cout << G.vexs[i] << " ";
}
cout << endl;
}
void PrintEdge(AMGraph G)
{
for (int i = 0;i < G.vexnum;i++)
{
cout << G.vexs[i] << " ";
for (int j = 0;j < G.vexnum;j++)
{
cout << G.arcs[i][j] << " ";
}
cout << endl;
}
}
bool visited[Max];
void DFS(AMGraph G, int v)
{
cout << G.vexs[v];
visited[v] = true;
for(int w = 0; w < G.vexnum; w++)
{
if( (G.arcs[v][w] != 0) && (!visited[w]) )
{
cout << "->";
DFS(G, w);
}
}
}
void DFSTraverse(AMGraph G)
{
for (int i = 0;i < Max;i++)
{
visited[i] = false;
}
for (int i = 0;i < G.vexnum;i++)
{
if (!visited[i])
{
DFS(G, i);
cout << endl;
}
}
}
int main()
{
AMGraph G;
CreatUDN(G);
cout << "创建的图为:" << endl;
PrintVex(G);
PrintEdge(G);
cout << "深度遍历顺序为:" << endl;
DFSTraverse(G);
cout << endl;
return 0;
}
2.测试结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7a97e3f84e1e9ec916311652c65028d4.png)