[数据结构] 图的邻接矩阵深度优先搜索

来源:互联网 发布:羽毛球软件 编辑:程序博客网 时间:2024/04/27 14:58

                                 

无向图如上所示

依次输入图的信息

#include <iostream>using namespace std; #define MAX_V 100 //定义最大顶点个数#define INF 1000 //表示正无穷 typedef struct VertexType{    int number;//顶点标号};//顶点类型typedef struct MGraph//图的定义{    int matrix[MAX_V][MAX_V];//邻接矩阵    int weight[MAX_V][MAX_V];//存放权值     int v;//顶点数int e;//边数    VertexType vertax[MAX_V];//存放顶点信息};//图的邻接矩阵类型bool visited[MAX_V]; //全局变量记录访问结点 void CreateMGragh(MGraph *G){int i,j,m,weight;cout << "请输入顶点数和边数:" << endl;cin >> G->v >> G->e ;cout << "请输入顶点信息:" << endl;for (i=0;i<G->v;i++){    scanf("%d",&G->vertax[i].number);//输入顶点信息,建立顶点表}for (i=0;i<G->v;i++)//初始化邻接矩阵   for (j=0;j<G->v;j++)      {   G->matrix[i][j]=0;  G->weight[i][j]=INF;//让所有权值不存在       }    for(i=0;i<G->v;i++)//是结点自身指向自身权值为0   for(j=0;j<G->v;j++)    if(i==j)      G->weight[i][j]=0;cout << "输入每条有向边的首尾顶点序号:" << endl;for (m=0;m<G->e;m++){cin >> i >> j ;   // >> weight;G->matrix[i][j]=1;G->matrix[j][i]=1;//G->weight[i][j]=weight;}}void DisplayMGragh(MGraph *G)//输出邻接矩阵G{    int i,j;    for(i=0;i<G->v;i++)    {        for(j=0;j<G->v;j++)          printf("%5d",G->matrix[i][j]);        printf("\n");    }}void DisplayMGragh_W(MGraph *G)//输出权值矩阵G{    int i,j;    for(i=0;i<G->v;i++)    {        for(j=0;j<G->v;j++)          printf("%5d",G->weight[i][j]);        printf("\n");    }}void DFS(MGraph *G,int j){visited[j] = true;cout << j << " ";for(int i = 0; i < G->v; i++){if(G->matrix[j][i] == 1 && !visited[i])  DFS(G,i);}} void DFSTraverse(MGraph *G){for(int i = 0; i < G->v; i++)  visited[i] = false;    for(int j = 0; j < G->v; j++)      if(!visited[j])        DFS(G,j);    cout << endl;} int main(){MGraph *M;M = new MGraph;CreateMGragh(M);DisplayMGragh(M);DFSTraverse(M);return 0;}


0 0
原创粉丝点击