• 关于图的简单路径,输出、是否存在等总结


    //输出图G从顶点u 到 v 的所有简单路径
    void Allpath(Graph G,int u,int v,int m,int path[],int i){//m记录每一个顶点的下一个邻接点,i初值为0
        ENode *p;
        int j,n;
        if(m==v){
            for(j=0;j<=i;j++){
                printf("%d
    ",path[j]);
            }
            printf("
    ");
        }else{
            p=G->adjList[m].firstarc;
            while(p!=null){
                n=p->adjvex;
                if(visited[n]==false && n!=v){
                    visited[n]=true;
                    path[i+1]=n;
                    Allpath(G,u,v,n,path,i+1);
                    visited[n]=false;
                }
            }
        }
    }
    /*给无向图G 中任意两个顶点i和j
    采用邻接表存储
    编写算法判断这两个顶点之间是否存在一条长度为k的简单路径
    */
    bool visited[maxsize];
    bool existPath(Graph G,int i,int j,int k){
        if(i==j && k=0){
            return true;
        }
        else if(k>0){
            visited[i]=true;
            for(Node *p=adjList[i].firstarc;p!=null;p=p->nextarc){
                if(visited[p->adjvex]==flase && existPath(G,p->adjvex,j,k-1)==true ){
                    return true;
                }
                visited[p->adjvex]=false;
            }
            return false;
        }
    }
    /*判断有向图的邻接表中是否有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;
        }
    }

    
    
    //邻接表 判断从u到v是否有简单路径,有则打印路径上的点
    void printPath(Graph G,int u,int v,int path[]
                        ,int d,bool &exist){//路径长度d
        visited[u]=true;
        d++;
        path[d]=u;
        if(u==v && d>0){
            exist=true;
            for(int i=0;i<d;i++){
                printf("%d
    ",path[i]);
            }
            return;
        }
        ENode *p=G.adjList[u].firstarc;
        int w;
        while(p!=null){
            w=p->adjvex;
            if(visited[w]==false){
                printPath(G,w,v,path,d,exist);
            }
            p=p->nextarc;
        }
    
    }
    
    //打印全部简单路径
    void Allpath(Graph G,int u,int v,int path[],int d){//路径长度
        d++;
        path[d]=u;
        visited[u]=true;
        if(u==v && d>0){
            for(int i=0;i<d;i++){
                printf("%d
    ", path[i]);
            }
            printf("
    ");
        }
        ENode *p=G.adjList[u];
        int w;
        while(p!=null){
            w=p->adjvex;
            if(visited[w]==false){
                Allpath(G,w,v,path,d);
            }
            p=p->nextarc;
        }
        visited[u]=false;
    }
    
    
    
    
    
  • 相关阅读:
    hibernate关联关系
    数据结构之二叉树java实现
    队列java实现
    栈java实现
    原生JS结合cookie实现商品评分组件
    JAVA学习第一阶段(2)
    JAVA学习第一阶段(1)
    如何修改hosts并保存
    运行Apache时出现the requested operation has failed
    实现一元多项式
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/12100795.html
Copyright © 2020-2023  润新知