最短路径问题Dijkstra算法的简单使用
图的应用非常广泛,下面就说说图的最短路径问题,使用的是Dijkstra,
其实就是将距离这个点最近的邻接点收进来,然后更新与其他点的距离,然后再收其他点
void Dijstra(Graph *G,int v0){ int S[Maxsize] = {0}; int dist[Maxsize]; int path[Maxsize]; for (int i = 0; i < G->vexnum; i++) { dist[i] = G->arcs[v0][i]; if (dist[i]<1000) { path[i] = v0; } else { path[i] = -1; } } S[v0] = 1; dist[v0] = 0; path[v0] = -1; while (1) { int k; int a = 1000; int flag = 0; for (int j = 0; j < G->vexnum; j++) { if (S[j]==0) { flag = -1; if (S[j]<a) { a = S[j]; k = j; } } } S[k] = 1; if (flag==0) { break; } for (int i = 0; i < G->vexnum; i++) { if (S[i] != 1 && dist[k] + G->arcs[k][i] < dist[i]) { dist[i] = dist[k] + G->arcs[k][i]; path[i] = k; } } } }
好了,我们下回见,peace

浙公网安备 33010602011771号