您的位置:首页 > 其它

单源最短路径 :Dijkstra 算法

2010-10-05 17:09 435 查看
Dijkstra 算法用于解决有向图的最短路径问题。算法描述如下:
1. 初始化原点的距离为0,到其他任意点到原点的距离为无穷大。
2. 初始化已访问节点集合为空,未访问节点集合为所有节点。
3. 在未访问节点集合中找到一个到已访问节点集合距离最近的节点(第一次找到的节点为原点),将该节点加入已访问节点。
4. 更新该节点的邻居节点中处于未访问状态的节点的距离。
5. 重复第三步。直到所有节点都已经访问。

下面是一个最基本的Dijkstra 算法的c++实现,有向图存储采用的是邻接矩阵。
const int MAXN = 1001;
const int INF = 0x7FFFFFFF;

int matrix[MAXN][MAXN];
int dis[MANX] = {INF};
bool visit[MAXN] = {false}

void dijkstra(int src, int des, int N)
{
int n = N;     // N为节点总数
int i, min, mdis = INF;
dis[src] = 0;  // 第一步

while (n)
{
mdis = INF;
for (i = 1; i <= N; i++)                         // 第三步
if (visit[i] == false && dis[i] < mdis)
min = i, mdis = dis[i];

visit[min] = true, n--;

for (i = 1; i <= N; i++)                         // 第四步
if (matrix[min][i] < INF && visit[i] == false && dis[min] + matrix[min][i] < dis[i])
dis[i] = dis[min] + matrix[min][i];
}

printf("%d/n", dis[des]); // 打印结果
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: