69,371
社区成员
发帖
与我相关
我的任务
分享
/*求v相当于w的下一个邻接点*/
int NextAdjVertex(AdjMatrix g, int v, int w)
{
int i;
for (i = w + 1; i < g.vexnum; i++)
if (g.arcs[v][i].adj != INFINITY && g.arcs[v][i].adj != 0) return(i);
return(-1);
}
/*求v的第一个邻接点*/
int FirstAdjVertex(AdjMatrix g, int v)
{
int i;
for (i = 0; i < g.vexnum; i++)
if (g.arcs[v][i].adj != INFINITY && g.arcs[v][i].adj != 0) return(i);
return(-1);
}
int visited2[MAX_VERTEX_NUM];//广度优先遍历访问标志数组
/*最短简单路径查询(中转次数最少)广度优先遍历图g*/
void ShortestPath(AdjMatrix g, int v0, int v)
{
int vi, w;
for (vi = 0; vi < g.vexnum; vi++) visited2[vi] = False;
printf("\t\t");
visit(v0);
visited2[v0] = True;
LinkQueue Q;
InitQueue(&Q);
EnterQueue(&Q, v0);
while (!Empty(Q))
{
DeleteQueue(&Q, &v);
w = FirstAdjVertex(g, v);
while (w != -1)//邻接点存在
{
if (!visited2[w])
{
visit(w);
visited2[w] = True;
EnterQueue(&Q, w);
}
w = NextAdjVertex(g, v, w);
}
}
printf("%d", v);
}