无向图的深度遍历

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无向图的深度遍历相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<fstream>
using namespace std;
int e[100][100];        //无向图图采用邻接矩阵表示,一般的图采用数组,稀疏图可采用vector动态表示节约资源
int book[100];            //采用book数组记录节点是否已经访问过
int n,m;                //n个顶点,m条边
void dfs(int cur)
{
    cout<<cur<<" ";
    for(int i=1;i<=n;i++)
    {
        if(e[cur][i]==1&&book[i]==0)
        {
            book[i]=1;
            dfs(i);
        }
    }
}
int main()
{
    fstream f("1.txt");
    //f>>n>>m;
    cin>>n>>m;
    //初始化n维数组
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(i==j)
                e[i][j]=0;
            else
                e[i][j]=99;
        }
    }
    //输入图的信息
    int x,y;
    for(int i=1;i<=m;i++)
    {
        //f>>x>>y;
        cin>>x>>y;
        e[x][y]=1;
        e[y][x]=1;
    }
    memset(book,0,sizeof(int));
    int count=0;
    for(int i=1;i<=n;i++)
    {
        if(book[i]==0)
        {
            book[i]=1;
            dfs(i);
            count++;
            cout<<endl;
        }
    }
    cout<<"该图共有"<<count<<"个连通分量"<<endl;
}

//记忆技巧,主循环里面三个for,前两个用来初始化图,后一个遍历每个连通分量
//关于dfs只需维护一个cur参数即可,对于点V来说,只要遍历它的周围即可(即一个for即可)

以上是关于无向图的深度遍历的主要内容,如果未能解决你的问题,请参考以下文章

(栈)图的深度优先遍历

无向图的深度遍历

JS实现图的创建和遍历

图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析

Java实现无向图的邻接列表表示,深度遍历及广度遍历

Java数据结构54:图的深度优先遍历与广度优先遍历数据结构课程设计