图之深度优先遍历

#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
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞