最短路径算法

最短路径算法

#include <iostream>

 

void path(){

    //val[i][j]从i点到j点的距离,如果不可到达到,设置成0

    int val[8][8];

    //res[i][j]从i点到j点的最短距离,我们只要得到res[0][7]

    int res[8][8];

    //fa[i]i点的前一个最短距离点

    int fa[8];

    for (int i = 0; i<8; i++) {

        for (int j = 0; j<8; j++){

            val[i][j] = 0;

            res[i][j] = 10000;

        }

        fa[i] = -1;

    }

    res[0][0] = 0;

    val[0][1] = 13;

    val[0][2] = 15;

    val[0][3] = 16;

 

    val[1][4] = 18;

    val[1][5] = 17;

    val[1][6] = 16;

 

    val[2][4] = 18;

    val[2][5] = 20;

    val[2][6] = 30;

    val[3][4] = 11;

    val[3][5] = 9;

    val[3][6] = 13;

 

    val[4][7] = 16;

    val[5][7] = 14;

    val[6][7] = 17;

 

    for (int i = 1; i<8; i++) {

        for (int j = 0; j<i; j++){

            if (val[j][i] != 0) {

                if (res[0][j] +val[j][i]<res[0][i]) {

                    res[0][i] = res[0][j] +val[j][i];

                    fa[i] = j;

                }

            }

        }

    }

    int point = 7;

    std::cout << 7 << "";

    while (fa[point] != -1) {

        std::cout << "<---" << fa[point];

        point = fa[point];

    }

    std::cout << std::endl;

    std::cout << res[0][7] <<std::endl;

}

 

int main(int argcconst char * argv[]) {

    // insert code here...

    std::cout << "Hello,World!\n";

    path();

 

    system("pause");

    return 0;

}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值