zoukankan      html  css  js  c++  java
  • 6-19 Count Connected Components(20 分)

    Write a function to count the number of connected components in a given graph.

    Format of functions:

    int CountConnectedComponents( LGraph Graph );
    

    where LGraph is defined as the following:

    typedef struct AdjVNode *PtrToAdjVNode; 
    struct AdjVNode{
        Vertex AdjV;
        PtrToAdjVNode Next;
    };
    
    typedef struct Vnode{
        PtrToAdjVNode FirstEdge;
    } AdjList[MaxVertexNum];
    
    typedef struct GNode *PtrToGNode;
    struct GNode{  
        int Nv;
        int Ne;
        AdjList G;
    };
    typedef PtrToGNode LGraph;
    

    The function CountConnectedComponents is supposed to return the number of connected components in the undirected Graph.

    Sample program of judge:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef enum {false, true} bool;
    #define MaxVertexNum 10  /* maximum number of vertices */
    typedef int Vertex;      /* vertices are numbered from 0 to MaxVertexNum-1 */
    
    typedef struct AdjVNode *PtrToAdjVNode; 
    struct AdjVNode{
        Vertex AdjV;
        PtrToAdjVNode Next;
    };
    
    typedef struct Vnode{
        PtrToAdjVNode FirstEdge;
    } AdjList[MaxVertexNum];
    
    typedef struct GNode *PtrToGNode;
    struct GNode{  
        int Nv;
        int Ne;
        AdjList G;
    };
    typedef PtrToGNode LGraph;
    
    LGraph ReadG(); /* details omitted */
    
    int CountConnectedComponents( LGraph Graph );
    
    int main()
    {
        LGraph G = ReadG();
        printf("%d
    ", CountConnectedComponents(G));
    
        return 0;
    }
    
    /* Your function will be put here */
    

    Sample Input (for the graph shown in the figure):

    8 6
    0 7
    0 1
    2 0
    4 1
    2 4
    3 5
    

    Sample Output:

    3
    

    找图的连通分支

    代码:

    int CountConnectedComponents( LGraph Graph )
    {
        int vis[MaxVertexNum] = {0};
        int c = 0;
        for(int i = 0;i < Graph -> Nv;i ++)
        {
            if(vis[i] == 0)
            {
                c ++;
                vis[i] = 1;
                PtrToAdjVNode t;
                int head = 0,tail = 0;
                int s[10];
                s[tail ++] = i;
                while(head < tail)
                {
                    t = Graph -> G[s[head]].FirstEdge;
                    while(t)
                    {
                        if(!vis[t->AdjV])
                        {
                            vis[t->AdjV] = 1;
                            s[tail ++] = t -> AdjV;
                        }
                        t = t -> Next;
                    }
                    head ++;
                }
            }
        }
        return c;
    }
  • 相关阅读:
    ASP.NET Cookies的使用
    How to trigger editing of elements inside a reorderlist?
    Not in 的LinQ实现
    .Net中TextBox回车捕捉
    多个TermQuery或一个MultiFieldQueryParser构建BooleanQuery多个域的检索学习实例代码
    ASP.NET的异常处理
    一些有用的API 之 飛信發短信
    C# lock 避免多人同时操作
    一個人性化的“Error 404”,不要錯過!
    SQL索引系列(四)
  • 原文地址:https://www.cnblogs.com/8023spz/p/7757681.html
Copyright © 2011-2022 走看看