dijkstra

旧街凉风 提交于 2019-12-04 20:55:08

朴素版

int dist[maxn], g[40][40];
bool vis[maxn];
void dijkstra(int cc) {
    //cc是单源节点编号 
    for (int i = 1; i <= n; i++) {
        dist[i] = g[i][cc];
    }
    dist[cc] = 0;
    
    memset(vis, 0, sizeof(vis));
    vis[cc] = 1;

    for (int i = 1; i <= n; i++) {
        int mark = -1, mindis = INF;
        for (int j = 1; j <= n; j++) {
            if (!vis[j] && dist[j] < mindis) {
                mindis = dist[j];
                mark = j;
            }
        }
        vis[mark] = 1;
        for (int j = 1; j <= n; j++) {
            if (!vis[j]) {
                dist[j] = min(dist[j], dist[mark] + g[mark][j]);
            }
        }
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!