zoukankan      html  css  js  c++  java
  • 求单源最短路径两顶点最短距离(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);
                }
            }
        }
    }
  • 相关阅读:
    Prism-超轻量的开源框架
    1的数目
    二叉树中和为某一值得路径
    把二叉树打印成多行
    对称的二叉树
    二叉树的下一个节点
    删除链表中重复的结点
    数组中的重复数字
    连表中环入口的节点
    把字符串换成整数
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/12109944.html
Copyright © 2011-2022 走看看