数据结构 图的深度优先遍历算法

邻接矩阵:

#include <iostream>     
using namespace std;
   
#define maxsizes 105
typedef int Type;

// 顶点定义
typedef struct{
    Type data;
}vertex;

// 邻接矩阵定义
typedef struct{ 
    int n,e;
    vertex vex[maxsizes];
    int edges[maxsizes][maxsizes];
}MGraph;

// 访问结点
void visitvertex(MGraph G,int x){
    cout<<" "<<x;//G.vex[x].data;
}

// 深度优先遍历
bool visit[maxsizes]={false};
void DFS(MGraph &G,int v){
    visit[v]=true;
    visitvertex(G,v); 

    for(int i=1;i<=G.n;++i){
        if(visit[i]==false && G.edges[v][i]==1){
            DFS(G,i);
        }
    } 
}

/*
7 7
1 2 
1 3
3 6
2 5
5 4 
5 7 
4 7
//  1 2 5 4 7 3 6
*/
// 图的深度优先遍历算法 (邻接矩阵)
int main(void){     
    MGraph G;
    cin>>G.n>>G.e;

    for(int i=1;i<=G.e;++i){    // 邻接矩阵 
        int temp1,temp2;
        cin>>temp1>>temp2;
        G.edges[temp1][temp2]=1; // 无向图
        G.edges[temp2][temp1]=1;
    } 
       
    DFS(G,2);   

    return 0;
} // jinzheng 2018.9.19 20:00

 

邻接表代码:

#include <iostream>     
#include <vector>
using namespace std;
   
vector<int> G[1005];
bool visit[1005]={false};

// 访问结点
void visited(int x){
    cout<<" "<<x;
}

// 深度优先遍历
void dfs(int v){ 
    visit[v] = true;
    visited(v);

    for(int i=0;i<G[v].size();++i){
        if(visit[G[v][i]]==false){
            dfs(G[v][i]);
        }
    }
}  

/*
7 7
1 2 
1 3
3 6
2 5
5 4 
5 7 
4 7 
*/

// 图深度优先遍历 (邻接表)
int main(void){     
    int n,e;
    cin>>n>>e; 
    
    for(int i=1;i<=e;++i){ // 邻接表
        int temp1,temp2;
        cin>>temp1>>temp2;
        G[temp1].push_back(temp2);
        G[temp2].push_back(temp1);
    }
 
    dfs(7);

    return 0;
} // jinzheng 2018.9.19 21:09

 

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/guangjinzheng/article/details/82777956
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞