最短路——Dijkstra

来源:互联网 发布:室内设计网站 知乎 编辑:程序博客网 时间:2024/06/08 16:19

Dijkstra算法,不能处理负边负环,不连通时返回-1。使用优先队列可以优化一下,此处不做介绍。

贪心策略。

邻接矩阵实现。亦可用邻接表,效率好一些。

const int maxn = 110;const int max_int = ~(1<<31);const int min_int = (1<<31);bool vis[maxn];int cost[maxn][maxn], dist[maxn];//[0,max_int]int min(int a, int b){return a < b ? a : b;}int dijkstra(int s){memset(vis, 0, sizeof(vis));for(int i = 0; i < n; ++i){dist[i] = max_int;}dist[s] = 0;vis[s] = true;for(int k = 1; k < n; ++k){int maxv = max_int, v = -1;for(int i = 0; i < n; ++i){if(!vis[i] && d[i] < maxv){maxv = d[v = i];}}if(-1 == v)return -1;vis[v] = true;for(int i = 0; i < n; ++i){if(!vis[i]){d[i] = min(d[i], d[v] + cost[v][i]);}}}}


0 0
原创粉丝点击