zoukankan      html  css  js  c++  java
  • 无向图的深度遍历

    #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即可)

  • 相关阅读:
    JQuery选择器
    JQuery语法
    数据库分页查询
    webservice开发说明文档
    javaweb项目中的文件上传下载功能的实现
    表单中input的type用法详解
    关于所谓大数据的一些疑惑
    spring boot 常见的第三方集成
    spring boot + apache camel 传输文件
    spring boot 1.x配置,不断完善中
  • 原文地址:https://www.cnblogs.com/hutao886/p/5162009.html
Copyright © 2011-2022 走看看