无向连通图u->v最短路径
typedef struct {
int data;
int parent;
}QUEUE;
//无向连通图u->v最短路径
void ShortPath(AdjGraph* G, int u, int v)
{
ArcNode* p;
int w, i;
QUEUE qu[MAXV];
int front = -1, rear = -1;
int visited[MAXV];
for (i = 0; i < G->n; i++) //初始访问标记
visited[i] = 0;
rear++; //进队 rear=0
qu[rear].data = u;
qu[rear].parent = -1;
visited[u] = 1; //初始结点
while (front != rear)
{
front++; //出队
w = qu[front].data;//w 记录data 即结点
if (w == v) //找到了
{
i = front; //从front开始 用i遍历
while (qu[i].parent != -1)
{
cout << qu[i].data;
i = qu[i].parent;
}
cout << qu[i].data;
break;
}
p = G->adjlist[w].firstarc; //第一个邻接点
while (p != NULL)
{
if (visited[p->adjvex] == 0)
{
visited[p->adjvex] = 1; //置标志
rear++; //进队
qu[rear].data = p->adjvex;
qu[rear].parent = front;
}
p = p->nextarc; //找下一个邻接点
}
}
}
距离最远的结点
//距离最远的结点
int MaxDist(AdjGraph* G, int v)
{
ArcNode* p;
int Qu[MAXV];
int front = 0, rear = 0;
int visited[MAXV];
int i, j, k;
for (i = 0; i < G->n; i++)
visited[i] = 0;
rear++;
Qu[rear] = v; //进队
visited[v] = 1;
while (rear != front) //队不空
{
front = (front + 1) % MAXV;
k = (Qu)[front]; //出队
p = G->adjlist[k].firstarc; //记录第一个邻接点
while (p != NULL)
{
j = p->adjvex; //邻接点
if (visited[j] == 0)
{
visited[j] = 1;
rear = (rear + 1) % MAXV;
Qu[rear] = j; //进队
}
p = p->nextarc;
}
}
return k;
}