#include<iostream>
using namespace std;
typedef char VertexType; /* 顶点类型应由用户定义 */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */
#define MAXSIZE 9 /* 存储空间初始分配量 */
#define MAXEDGE 15
#define MAXVEX 9
#define INFINITY 65535
typedef struct
{
VertexType vexs[MAXVEX]; /* 顶点表 */
EdgeType arc[MAXVEX][MAXVEX];/* 邻接矩阵,可看作边表 */
int numVertexes, numEdges; /* 图中当前的顶点数和边数 */
} MGraph;
void CreateGraph(MGraph *G) //初始化吐
{
printf("请输入顶点数和边数:");
scanf("%d%d",&(G->numVertexes),&(G-> numEdges));
char c;
c=getchar();
int i,j;
for(i=0;i<G->numVertexes;i++)
for(j=0;j<G->numVertexes;j++)
G->arc[i][j]=INFINITY;
printf("请输入顶点信息(char)型\n");
for(i=0;i<G->numVertexes;i++)
scanf("%c",&(G->vexs[i]));
c=getchar();
int w=1;
for(int k=0;k<G->numEdges;k++)
{
printf("请输入(vi,vj)的下标i,j:");
scanf("%d%d",&i,&j);
c=getchar();
G->arc[i][j]=w;
G->arc[j][i]=w;
}
}
bool visited[MAXVEX];/* 访问标志的数组 */
/* 邻接矩阵的深度优先递归算法 */
void DFS(MGraph MG, int i)
{
int j;
visited[i] = true;
cout << MG.vexs[i] << ' '; /* 打印顶点,也可以其它操作 */
for (j = 0; j < MG.numVertexes; j++)
if (MG.arc[i][j] == 1 && !visited[j])
DFS(MG, j);/* 对为访问的邻接顶点递归调用 */
}
/* 邻接矩阵的深度遍历操作 */
void DFSTraverse(MGraph MG)
{
int i;
for (i = 0; i < MG.numVertexes; i++)
visited[i] = false;/* 初始所有顶点状态都是未访问过状态 */
for (i = 0; i < MG.numVertexes; i++)
if (!visited[i])
DFS(MG, i);/* 对未访问过的顶点调用DFS,若是连通图,只会执行一次*/
}
void main()
{
MGraph G;
CreateGraph(&G);
DFSTraverse(G);
}
图之深度优先遍历
原文作者:数据结构之图
原文地址: https://blog.csdn.net/steph_curry/article/details/78936516
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/steph_curry/article/details/78936516
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。