文章

11

粉丝

152

获赞

45

访问

39.3k

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

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

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

邻接矩阵法:

  1. #include<stdio.h>
  2. #define N 1001
  3. #define MAX 110000000
  4. int dis[N][N]; //表示距离的邻接矩阵
  5. int cost[N][N]; //表示花费的邻接矩阵
  6. int adis[N]; //单点到其他点的距离最小值
  7. int acost[N]; //在距离最小的前提下的花费最小值
  8. bool mark[N]; //是否已经在集合中
  9. void init(int n) //初始化各数组
  10. {
  11. for(int i=1;i<=n;i++) //将距离和花费均设为不可达 即最大。
  12. {
  13. adis[i]=MAX;
  14. acost[i]=MAX;
  15. }
  16. for(int i=1;i<=n;i++) //所有点均不在集合上。
  17. mark[i]=false;
  18. for(int i=1;i<=n;i++){ //对于邻接矩阵,i==j设为0,自己到自己必定不需要消耗,不相等设为无限大
  19. for(int j=1;j<=n;j++){
  20. if(i==j) {
  21. dis[i][j]=0;
  22. cost[i][j]=0;
  23. }
  24. else
  25. {
  26. dis[i][j]=MAX;
  27. cost[i][j]=MAX;
  28. }
  29. }
  30. }
  31. }
  32. int main()
  33. {
  34. int n,m; //点数,边数
  35. int start,over; //起点,终点。
  36. while(~scanf("%d%d",&n,&am...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发