zoukankan      html  css  js  c++  java
  • 运用DFS算法解决的图的相关算法应用

    /*
    求无向图G的连通分量个数
    dfs运用
    */
    void DFS(Graph G,int v){
        ENode *p;
        visited[v]=true;
        visit(t);
        p=G->adjList[v].firstarc;
        while(p!=null){
            if(visited[p->adjvex]==false){
                DFS(G,p->adjvex);
            }
            p=p->nextarc;
        }
    }
    int ComnNum(Graph G){
        int num=0;
        for(int i=0;i<G->vertices;i++){
            visited[i]=false;
        }
        for(int i=0;i<G->vertices;i++){
            if(visited[i]==false){
                DFS(G,i);
                num++;
            }
        }
    }
    /*
    图G采用邻接表存储
    设计一个算法判断图G是否是连通图
    */
    void DFS(Graph G,int v){
        ENode *p;
        visited[v]=true;
        visit(v);
        p=G->adjList[v].firstarc;
        while(p!=null){
            if(visited[p->adjvex]==false){
                DFS(G,p->adjvex);
            }
            p=p->nextarc;
        }
    }
    bool IsConnect(Graph G){
        bool flag=true;
        int visited[maxsize];
        for(int i=0;i<g.Vertices;i++){
            visited[i]=false;
        }
        DFS(G,0);
        for(int i=0;i<G->vertices;i++){
            if(visited[i]==false){
                flag=false;
                break;
            }
        }
        return flag;
    }
    /*
    判断有向图的邻接表中是否有Vi->Vj的路径
    */
    void DFS(Graph G,int v){
        ENode *p;
        visited[v]=true;
        visit(t);
        p=G->adjList[v].firstarc;
        while(p!=null){
            if(visited[p->adjvex]==false){
                DFS(G,p->adjvex);
            }
            p=p->nextarc;
        }
    }
    bool visited[maxsize];
    bool existPath(Graph G,int v,int j){
        for(int i=0;i<G->vertices;i++){
            visited[i]=false;
        }
        DFS(G,v);
        if(visited[j]==false){
            return false;
        }else{
            return true;
        }
    }
    /*
    设计一个函数concomx(),求用邻接表存储的无向图中
    节点总数恰好为k 的连通分量个数
    */
    void DFS(Graph G,int v,bool &visited[],int &Vnum){
        ENode *p;
        visited[v]=true;
        Vnum++;
        for(p=adjList[v]->firstarc;p;p=p->next){
            if(visited[p->adjvex]==flase){
                DFS(G,p->adjvex,visited,Vnum);
            }
        }
    }
    bool visited[maxsize];
    int concomx(Graph G,int k){//结点个数
        int count=0;//记录连通分量个数
        int Vnum=0;
        for(int i=0;i<G.vertices;i++){
            visited[i]=false;
        }
        for(int i=0;i<G.vertices;i++){
            Vnum=0;
            if(visited[i]==false){
                DFS(G,i,visited,Vnum);
            }
            if(Vnum==k) count++;
        }
        return count;
    }
    /*
    设计一个算法,判断一个无向图G是否为一棵树。
    是树返回true 否则false
    
    结论:用DFS 访问节点数为n 访问的边数为2(n-1)
    如果是一棵树 访问边数为2(n-1)
    */
    void DFS(Graph G,int v,int &Vnum,int &Enum){
        ENode *pl
        visited[v]=true;
        Vnum++;//
        p=adjList[v].firstarc;
        while(p!=null){
            Enum++;//
            if(visited[p->adjvex]==false){
                DFS(G,p->adjvex,Vnum,Enum);
            }
            p=p->nextarc;
        }
    }
    bool IsTrre(Graph G){
        int Vnum=0,Enum=0;
        for(int i=0;i<G.vertices;i++){
            visited[i]=false;
        }
        DFS(G,1,Vnum,Enum);
        if(Vnum==g.vertices && Enum==2*(Vnum-1)){
            return true;
        }else{
            return false;
        }
    }
    //无向图G用邻接矩阵G,给定顶点v0出发深度遍历图G,
    //并将产生的深度遍历生成树存在邻接矩阵B中
    void DFS(Graph G,int b[][maxsize],int v){
        visited[v]=true;
        for(int j=0;j<G.vertices;j++){
            if(G.A[v][j]&&!visited[j]){
                b[v][j]=1;
                DFS(g,j,b);
            }
        }
    }
    bool visited[maxsize];
    void shengchengTree(Graph g,int b[][maxsize]){
        for(int i=0;i<G.vertices;i++){
            visited[i]=false;
        }
        for(int i=0;i<G.vertices;i++){
            if(!visited[i]){
                DFS(G,b,i);
            }
        }
    }
  • 相关阅读:
    VMware安装虚拟机(Ubuntu)
    鼠标拖拽事件
    css层叠样式表
    html--form表单常用操作
    python学习之HTML-table标签
    python之web前端day01
    字符串各种操作,关于字符串的内置函数
    正则中匹配次数的问题
    re模块
    Github网站打不开的问题
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/12101606.html
Copyright © 2011-2022 走看看