美文网首页
模板-邻接表DFS遍历

模板-邻接表DFS遍历

作者: 余生筑 | 来源:发表于2019-03-16 10:12 被阅读0次
/*Eulerian:所有节点度数都不是奇数的连通无向图
semi-Eulerian:有2个节点度数是奇数的连通无向图
non-Eulerian:不符合上述两条的连通无向图,以及非连通无向图

注意题目给出的图只保证是无向图,不保证是否连通*/
 
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
const int MAXV=201,INF=1000000;
int N,M,cnt=0;
vector<int> Adj[MAXV];
bool vest[MAXV]= {false};
void DFS(int v)
{
    vest[v]=true;
    for(int i=0; i<Adj[v].size(); i++)
    {
        if(vest[Adj[v][i]]==false)//注意邻接表DFS遍历与邻接矩阵FDS遍历的区别,详见算法笔记P353页
            DFS(Adj[v][i]);
    }
}

//统计某图中,度为奇数的节点个数
int oddDegree()
{
    int sum=0;
    for(int i=0; i<N; i++)
    {
        if(Adj[i].size()%2!=0)
            sum++;
    }
    return sum;
}


int main()
{

    cin>>N>>M;
    int u,v;
    for(int i=0; i<M; i++)
    {
        cin>>u>>v;
        Adj[u-1].push_back(v-1);
        Adj[v-1].push_back(u-1);
    }

    for(int i=0; i<N; i++)
    {
        if(vest[i]==false)
        {
            cnt++;
            DFS(i);
        }
    }

    cout<<Adj[0].size();

    for(int i=1;i<N;i++)
    {
        cout<<" "<<Adj[i].size();
    }
    cout<<endl;

    if(cnt>1)
    {
        cout<<"Non-Eulerian"<<endl;
        return 0;
    }

    if(oddDegree()==0)
    {
        cout<<"Eulerian"<<endl;
        return 0;
    }
    if(oddDegree()==2)
    {
        cout<<"Semi-Eulerian"<<endl;
        return 0;
    }
    cout<<"Non-Eulerian"<<endl;
    return 0;
}

相关文章

  • 各种DFS

    DFS邻接矩阵遍历图 DFS邻接表遍历图 DFS回溯(不走重复路径) DFS背包(可重复选) DFS背包(不可重复选)

  • 模板-邻接表DFS遍历

  • 图的遍历

    1.采用深度优先搜索(DFS)遍历图 邻接矩阵: 邻接表: 2.采用广度优先搜索(BFS)遍历图 邻接矩阵: 邻接...

  • 图论小结

    图的存储 邻接矩阵 邻接表 图的遍历 DFS(双向DFS) BFS(剪枝) 单源最短路径算法 dij 条件:无负权...

  • 第七章 图

    邻接表定义 邻接表求各点入度 邻接表各点出度 DFS与BFS遍历 已知一个无向图G的邻接表存储表示如下,试写出从顶...

  • 机试常用算法和题型-图专题

    图专题 并查集,寻找父节点,合并模板 图的遍历DFS邻接矩阵和邻接表法 迪杰特斯拉求最短路径长度+从某点到另一点的...

  • 数据结构-图

    图的增删改查 增 邻接表 邻接矩阵 删 改 查 图的遍历 深度优先遍历(DFS) 深度优先搜索法是树的先根遍历的推...

  • 图的BFS以及DFS递归非递归实现

    本文所使用的所有邻接表以及邻接矩阵定义均在之前博客,这里不再赘述 一、深度优先遍历DFS(Depth-first ...

  • 数据结构笔记(图-图的遍历)

    深度优先搜索(Depth First Search,DFS):相当于树的先序遍历用邻接表存储,则DFS的时间复杂度...

  • 五. 图

    图的存储 顺序表(矩阵存储) 链表(邻接链表) 图的遍历 BFS, DFS 图的最小生成树 Prim, Krusk...

网友评论

      本文标题:模板-邻接表DFS遍历

      本文链接:https://www.haomeiwen.com/subject/pusjmqtx.html