王道数据结构第6章图归纳总结中给出的NextNeighbor函数
以下是邻接表的定义
typedef struct ArcNode
{ //边表结点
int adjvex; //该弧所指向的顶点的位置
struct ArcNode *next; //指向下一条弧的指针
// int data; //网的边权值
} ArcNode;
typedef struct VNode
{ //顶点表结点
VertexType data; //顶点信息
ArcNode *first; //指向第一条依附该顶点的弧的指针
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct
{
AdjList vertices; //邻接表
int vexnum, arcnum; //图的顶点数和弧数
} ALGraph; // ALGraph是以邻接表存储的图类型
而我们明显发现ArcNode结构体中并没有data,正确的应改为p->adjvex
p->next->adjvex
附上NextNeighbor函数的正确代码
int NextNeighbor(ALGraph G, int x, int y)
{
//以邻接表作为存储结构
if (x != -1)
{
ArcNode *p = G.vertices[x].first;
while (p != NULL && p->adjvex != y)
{
p = p->next;
}
if (p != NULL && p->next != NULL)
return p->next->adjvex;
}
return -1;
}