Dijkstra算法只能求某一个点到其他所有点的最短路径,所以叫单源最短路径
int min(int a, int b)
{
return a > b ? b : a;
}
void Dijkstra(int SP)
{
int n;//总共n个点
int dis[MaxSize];//起始点SP到其他点的距离
int map[MaxSize][MaxSize];//图中各点间的路径长度
bool visited[MaxSize]; //标记数组
//true表示为已经确定与SP距离的点
memset(visited, false, sizeof(visited));
//初始化标记数组,表示均未访问过
memset(dis, INF, sizeof(dis));
//初始化,图中SP到各点的距离为无穷大
visited[SP] = true; //标记已经访问开始点SP
for (int i = 1; i <= n; i++)
dis[i] = min(dis[i], map[SP][i]);
//存储SP能直接连接的点距离
for (int i = 1; i <= n; i++)
{
int x;//一个点
int close = INF;//最近距离
for (int y = 1; y <= n; y++)
if (!visited[y] && dis[y] <= close)
//点y未被访问过
{
x = y; //保存dis中最短路径点
close = dis[y];
}
//for循环遍历完的点x,为所有点中与SP的距离最近的
visited[x] = true;//标记x已确定,距离已经固定
for (int y = 1; y <= n; y++)
dis[y] = min(dis[y], dis[x] + map[x][y]);
//经过x点,如果能缩短SP到y的距离,更新这个距离
}
//why not give me a like?
}