//(矩阵)求图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);
}
}
}
}