求单源最短路径两顶点最短距离(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); } } } }
版权声明:本文为zzuuoo666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。