计算距离顶点v的最短路径长度为K的所有顶点,假设图为G。
思路:Dijkstra超时了,其实没有必要求出所有的最短路径。
CODE:
#include<queue>
void shortPath(int v, int k, int t, MGraph *G)
{
std::queue<int> Que;
int leve = 0,n=G->NumVex;
int* book;
book = new int[n];
memset(book, -1, sizeof(book));
Que.push(v); book[v] = 0;
while (!Que.empty())
{
int u = Que.front();
Que.pop();
if (book[u] == leve)leve++;
if (leve > k)
{
Que.push(u);
break;
}
for (int i = 0; i < n; ++i)
{
if (book[i] < 0 && G->edge[u][i]>0)
{
book[i] = leve;
Que.push(i);
}
}
}
if (!Que.empty())
{
while (!Que.empty())
{
int u = Que.front();
Que.pop();
printf("%d ", u);
}
}
}