zoukankan      html  css  js  c++  java
  • 求一个有向连通图的割点 【微软面试100题 第三十九题】

    题目要求:

      求一个有向连通图的割点。割点的定义是,如果除去此结点和与其相关的边,有向图不再连通,描述算法。

    题目分析:

      判断某个点是否是割点的方法是,删除该点和与其相关的边,然后求连通性;这样逐个删除点(每次有且只删除一个点),就可以判断该图的割点有哪些了。

      判断图连通性的方法:从一个点出发,如果能遍历所有的点,则连通。

      使用邻接表表示有向图:

    typedef struct ArcNode
    {
        int adjvex;
        struct ArcNode *next;
    }ArcNode;
    typedef struct
    {
        char data;
        ArcNode *firstarc;
    }AdjList;
    typedef struct AlGraph
    {
        AdjList vertices[MAX_VERTEX_NUM];
        int vexnum,arcnum;
        int kind;
    }AlGraph;

    //核心代码
    AlGraph G;
    bool Dfs(char s) { visit[s] = true; cnt++ if(cut==G.vexnum-1) return true; ArcNode *p = G.vertices[s]; for(;p;p->firstarc) { if(!visit[p->data]) Dfs[p->data]; } return false; }
    //cut为全局变量,当cnt=删除一个点后的总点数时,则连通

      

  • 相关阅读:
    ajax发送cookies
    关于几个入口
    关于.net的概念
    codeproject
    Chrome extension
    modern web application
    JavaScript类型转换
    js方法在iframe父子窗口
    javascript book
    MVC Controller
  • 原文地址:https://www.cnblogs.com/tractorman/p/4079289.html
Copyright © 2011-2022 走看看