博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3790 最短路径问题 最短路Dijkstra
阅读量:4073 次
发布时间:2019-05-25

本文共 1899 字,大约阅读时间需要 6 分钟。

做图论的都是上辈子折翼的天使。。。有点难想,但若有明确的思路,程序很好打

清除所有点的标号
设d[0]=0,其他d[i]=INF
循环n次
{
     在所以未标号结点中,选出d值最小的节点x
     标记节点x
   对于从x出发的所有边(x,y), 更新d[y]=min(d[y],d[x]+w(x,y));
}
错了几次
第一次把路程和金钱分开处理了,很快查出来
第二次又错了,但心想这是模板题,怎么错了,一看discuss,重边。。哭了。。
打的时候发现了很多问题
假如INF==1<<31-1
memset(a,INF,sizeof(a)); 初始都为0.。。
而0x1f==31
memset(a,0x1f,sizeof(a))后,初始都为522133279.
memset(a,0x1f1f1f1f,sizeof(a))后,初始都为522133279.
代码:
#include
#include
#include
#include
using namespace std;const int maxn=1010;const int INF=0x1f1f1f1f;int dislen[maxn];int discost[maxn];int w[maxn][maxn];int ss[maxn][maxn];bool visit[maxn];int n,m;int s,t;int main(){ while(scanf("%d",&n)!=EOF) { scanf("%d",&m); if(n==0&&m==0) break; int i,j; memset(visit,true,sizeof(visit)); memset(w,0x1f,sizeof(w)); memset(ss,0x1f,sizeof(ss)); int u,v,len,cost; // for(i=1; i<=n; i++) // { // w[i][i]=0; // ss[i][i]=0; // } for(i=1;i
len||w[u][v]==len&&ss[u][v]>cost) { w[u][v]=len; w[v][u]=len; ss[u][v]=cost; ss[v][u]=cost; } } scanf("%d%d",&s,&t); for(i=1; i<=n; i++) { if(i==s) { dislen[i]=0; discost[i]=0; } else { dislen[i]=w[s][i]; discost[i]=ss[s][i]; } } for(j=1; j<=n; j++) { int x; int minn=INF; for(i=1; i<=n; i++) { if(visit[i]==true&&dislen[i]
dislen[x]+w[x][i]) { dislen[i]=dislen[x]+w[x][i]; discost[i]=discost[x]+ss[x][i]; } else if(visit[i]==true&&dislen[i]==dislen[x]+w[x][i]&&ss[x][i]+discost[x]

转载地址:http://nygji.baihongyu.com/

你可能感兴趣的文章
MongoDB数据库插入、更新和删除操作详解
查看>>
MongoDB文档(Document)全局唯一ID的设计思路
查看>>
mongoDB简介
查看>>
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>