文章

11

粉丝

152

获赞

9

访问

31.6k

头像
最短路径问题-迪杰斯特拉算法
P1344 浙江大学机试题
发布于2023年4月3日 11:03
阅读数 1.7k

首先这个题目按照题意是不能用floyd算法的,因为点的个数最大为1000,而floyd算法的复杂度为n*n*n,如果正式上机会超时。

既然已经决定要用迪杰斯特拉算法,那么首先考虑存储方式,这个题目即可以邻接链表,也可以邻接矩阵。

邻接矩阵法:

#include<stdio.h>
#define N 1001
#define MAX 110000000
int dis[N][N]; //表示距离的邻接矩阵
int cost[N][N];  //表示花费的邻接矩阵
int adis[N];  //单点到其他点的距离最小值
int acost[N];  //在距离最小的前提下的花费最小值
bool mark[N];  //是否已经在集合中
void init(int n)  //初始化各数组
{
    for(int i=1;i<=n;i++)  //将距离和花费均设为不可达 即最大。
    {
        adis[i]=MAX;
        acost[i]=MAX;
    }
    for(int i=1;i<=n;i++)  //所有点均不在集合上。
        mark[i]=false;
    for(int i=1;i<=n;i++){  //对于邻接矩阵,i==j设为0,自己到自己必定不需要消耗,不相等设为无限大
        for(int j=1;j<=n;j++){
            if(i==j) {
                dis[i][j]=0;
                cost[i][j]=0;
            }
            else
            {
                dis[i][j]=MAX;
                cost[i][j]=MAX;
            }
        }
    }
}
int main()
{
    int n,m;  //点数,边数
    int start,over; //起点,终点。
    while(~scanf("%d%d",&n,&am...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发