zoukankan      html  css  js  c++  java
  • 全源最短路径(Floyd算法)

    #include <iostream>
    #include <cstring>
    #include <cstdio>

    #define maxn 500
    #define INF 60000

    using namespace std;

    int map[maxn][maxn]; //图
    // bool vis[maxn]; //访问设置
    int dis[maxn][maxn]; //比如dis[i][i],从i到j的最短距离
    int path[maxn][maxn]; //记录路径
    int n, m; //n个顶点,m条边。顶点从0开始编号

    void Floyd() //佛洛依德算法
    {
    for (int i = 0; i < n; ++i) //初始化dis数组和路径
    {
    for (int j = 0; j < n; ++j)
    {
    dis[i][j] = map[i][j];
    if (i != j && dis[i][j] < INF)
    {
    path[i][j] = i; // 记录 i 到 j 的前一个节点编号
    }
    else
    path[i][j] = 0;
    }
    }
    for (int k = 0; k < n; k++) //注意k,i,j的嵌套顺序
    {
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < n; j++)
    {
    if (dis[i][j] > dis[i][k] + dis[k][j])
    {
    dis[i][j] = dis[i][k] + dis[k][j];
    path[i][j] = path[k][j];
    }
    }
    }
    }
    }

    void printPath(int S, int E)
    {
    //路径回溯
    int temp = path[S][E];
    cout << E;
    while (true)
    {
    if (temp == S)
    {
    cout << "<--" << S << endl;
    break;
    }
    cout << "<-" << path[S][temp];
    temp = path[S][temp];
    }
    }

    int main()
    {

    return 0;
    }
    人生如修仙,岂是一日间。何时登临顶,上善若水前。
  • 相关阅读:
    linux初始密码Mysql
    lamp整个打包
    模拟小球碰撞后返回
    Linux图形界面卡死
    非模态对话框
    菜单
    键盘消息简单示例
    菜单练习
    模态对话框练习
    阶段知识整合(画笔,画刷,字体)
  • 原文地址:https://www.cnblogs.com/f-society/p/15267276.html
Copyright © 2011-2022 走看看