1.求图G中顶点v的第一个邻接点的顶点号
/* 求图G中顶点v的第一个邻接点的顶点号 */
int AMG_FirstNeighbor(AMGraph G, VertexType v) {
int i=-1, j=-1; // 邻接矩阵的行号、列号
i=LocateVex(G, v); // 在顶点集中找到顶点v的顶点号
if (i == -1) { // 顶点v不在顶点集中,返回-1
return -1;
}
// 在邻接矩阵中找到顶点v的第一个邻接点的顶点号
for (int k = 0; k < G.vexnum; k++) {
if (G.Edge[i][k] == 1) {
j = k;
break;
}
}
return j;
}
2.求图G中除w邻接点外顶点v的下一个邻接点的顶点号
/* 求图G中除w邻接点外顶点v的下一个邻接点的顶点号 */
int AMG_NextNeighbor(AMGraph G,VertexType v,VertexType w) {
int i = -1; // 邻接矩阵的行号
i = LocateVex(G, v); // 在顶点集中找到顶点v的顶点号
if (i == -1) { // 顶点v不在顶点集中,返回-1
return -1;
}
int k = 0; // 记录邻接矩阵中顶点v的邻接点w的顶点号
// 在邻接矩阵中找到顶点v的邻接点w的顶点号
for (; k < G.vexnum; k++) {
if (G.Edge[i][k] == 1&&G.Vex [k]==w) {
break;
}
}
// 邻接点w不存在或w是顶点v的最后一个邻接点
if (k == G.vexnum ||k == G.vexnum - 1) {
return -1;
}
int j = k+1; // 记录邻接矩阵中除w邻接点外顶点v的下一个邻接点的顶点号
for (; j < G.vexnum; j++) {
if (G.Edge[i][j] == 1) {
return j;
}
}
return -1;
}