• 求单源最短路径两顶点最短距离(BFS)


    //(矩阵)求图G中顶点x的第一个临接点,如果有返回其下标,否则返回-1
    int FirstNeighbor1(MGraph G,int x){
        if(x >= MaxVertexNum) return -1;
        for(int i = 0;i < MaxVertexNum;++i){
            if(G.Edge[x][i] >= 0 && G.Edge[x][i] < MaxDis )
                return i;
        }
        return -1;
    }
    
    //(矩阵)假设G中顶点y是顶点x的一个相邻结点,返回除y之外顶点x的下一个临接点的定点号,若y是最后一个顶点则返回-1
    int NextNeighbor1(MGraph G,int x,int y){
        if(x >= MaxVertexNum) return -1;
        for(int i = y+1;i < MaxVertexNum;++i){
            if(G.Edge[x][i] >= 0 && G.Edge[x][i] < MaxDis )
                return i;
        }
        return -1;
    }
    
    //求图G中顶点x的第一个临接点,如果有返回其下标,否则返回-1(邻接表)
    int FirstNeighbor2(ALGraph G,int x){
       if(x >= G.vertices) return -1;
       if(G.adjList[x].firstarc!= NULL)
           return G.adjList[x].firstarc->adjvex;
       else
           return -1;
    }
    //(邻接表)假设G中顶点y是顶点x的一个相邻结点,返回除y之外顶点x的下一个临接点的定点号,若y是最后一个顶点则返回-1
    int NextNeighbor2(ALGraph G,int x,int y){
        ENode * temp = G.adjList[x].firstarc;
        while(temp!=NULL){
            if(temp->adjvex == y)
                break;
            else
                temp = temp->nextarc;
        }
        if(temp == NULL ||temp->nextarc == NULL)
            return -1;
        else
            return temp->nextarc->adjvex;
    }
    
    //求单源最短路径 (BFS) 两顶点最短距离
    void BFS_Mix_Distance(Graph G,int u,int v){
        //d[i]表示从u到i结点的最短路径
        for(int i=0;i<G.vertices;i++){
            d[i]=MAXNUM;
        }
        int w;
        InitQueue(Q);
        visit(u);
        visited[u]=true;
        d[u]=0;
        EnQueue(Q,u);
        while(!isEmpty(Q)){
            DeQueue(Q,u);
            for(w=FirstNeighbor(G,u);w>=0;w=NextNeighbor(G,u,w)){
                if(visited[w]==false){
                    visit(w);
                    visited[w]=true;
                    d[w]=d[u]+1;
                    EnQueue(Q,w);
                }
            }
        }
    }
  • 相关阅读:
    为什么不能直接导入Statsmodels使用?
    数据分析工作的主要内容和基本流程
    Nodejs 包与 NPM 第三方模块安装和 package.json 以及 CNPM (4)
    CommonJs 和 Nodejs 中自定义模块 (3)
    pyhthon 处理pdf 合集
    02 nodejs HTTP模块和url模块配置supervisor
    1 nodejs简介与开发环境配置
    mysql 修改root密码和禁用无密码登录配置
    floodFill填充函数函数(六)
    粗略的调整图片对比度和亮度(五)
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/12109944.html
Copyright © 2020-2023  润新知