摘要:
//(矩阵)求图G中顶点x的第一个临接点,如果有返回其下标,否则返回-1intFirstNeighbor1{ifreturn-1;for{ifreturni;}return-1;}//(矩阵)假设G中顶点y是顶点x的一个相邻结点,返回除y之外顶点x的下一个临接点的定点号,若y是最后一个顶点则返回-1intNextNeighbor1{ifreturn-1;for{ifreturni;}return-1;}//求图G中顶点x的第一个临接点,如果有返回其下标,否则返回-1(邻接表)intFirstNeighbor2{ifreturn-1;if(G.adjList[x].firstarc!
//(矩阵)求图G中顶点x的第一个临接点,如果有返回其下标,否则返回-1 int FirstNeighbor1(MGraph G,intx){ if(x >= MaxVertexNum) return -1; for(int i = 0;i < MaxVertexNum;++i){ if(G.Edge[x][i] >= 0 && G.Edge[x][i] <MaxDis ) returni; } return -1; } //(矩阵)假设G中顶点y是顶点x的一个相邻结点,返回除y之外顶点x的下一个临接点的定点号,若y是最后一个顶点则返回-1 int NextNeighbor1(MGraph G,int x,inty){ if(x >= MaxVertexNum) return -1; for(int i = y+1;i < MaxVertexNum;++i){ if(G.Edge[x][i] >= 0 && G.Edge[x][i] <MaxDis ) returni; } return -1; } //求图G中顶点x的第一个临接点,如果有返回其下标,否则返回-1(邻接表) int FirstNeighbor2(ALGraph G,intx){ 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,inty){ ENode * temp =G.adjList[x].firstarc; while(temp!=NULL){ if(temp->adjvex ==y) break; elsetemp = temp->nextarc; } if(temp == NULL ||temp->nextarc ==NULL) return -1; else return temp->nextarc->adjvex; } //求单源最短路径 (BFS) 两顶点最短距离 void BFS_Mix_Distance(Graph G,int u,intv){ //d[i]表示从u到i结点的最短路径 for(int i=0;i<G.vertices;i++){ d[i]=MAXNUM; } intw; 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); } } } }