单源最短路径<队列><可以返回再找>
来源:互联网 发布:linux android 模拟器 编辑:程序博客网 时间:2024/04/27 04:08
通过队列的方式。
求10-1的距离
先把到1的距离变为0
然后一个个找离1近的点 f[2]=14 f[3]=2 f[4]=1
然后找分别离他们近的点 f[5]=f[2]+1 f[6]=f[2]+3 f[6]之前的f[6]小 则 f[6]=f[3]+3 f[10]=f[4]+89
然后从被新添加的开始 f[5] f[6] f[10]开始 然后从6到2发现 更小 那么f[2]更新,则f[2]开始到各个点的距离又开始重新计算,最终得出1到各个点的最短距离
输入样例:
11 14
1 2 14
1 3 2
1 4 1
2 5 1
2 6 1
3 6 3
4 10 89
5 8 6
6 7 55
7 10 6
8 9 7
7 11 4
8 11 1
11 10 2
#include <iostream> #include <string.h>#include <queue> #define maxn 9999 using namespace std; int main(){ int n,n1,n2,x,a=0; cin >> n >> n1; //n表示有n个点,从n1到n2的距离 int map[n+1][n+1]; int f[n+1],c[n+1]; memset(c,0,sizeof(c)); int t1=1,t2=1,t3=1,i,j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=-1; for(i=0;i<n1;i++){ cin >> t1 >> t2 >> t3; map[t1][t2]=t3;map[t2][t1]=t3; } for(i=1;i<=n;i++) f[i]=maxn; f[1]=0;queue<int>qq;qq.push(1); while(!qq.empty()){ j=qq.front(); qq.pop(); for(i=1;i<=n;i++){ //cout << a++; if(map[i][j]!=-1&&f[j]!=maxn&&map[i][j]+f[j]<f[i]){ f[i]=f[j]+map[i][j]; qq.push(i); }}}cout << f[10];//int sum=0;//for(i=1;i<=n;i++)//sum+=c[i]; // cout << sum <<endl; /*x=n1; while(x){ printf("%d",x); x=c[x]; }*/return 0; }
0 0
- 单源最短路径<队列><可以返回再找>
- 队列实现迷宫问题(精装版,可返回路径)
- BFS+优先队列解决单源最短路径问题
- 可以找我帮助奥!!!!
- C#找系统文件夹路径
- goto可以返回
- 返回当前页路径
- 返回当前路径
- 优先队列分支限界法之单源最短路径
- 利用优先级队列(priority_queue)优化单源最短路径算法
- 想租服务器的可以找我
- 《再吃十次蛋糕 就可以找爸爸了》
- 找倍数(优先队列解法)
- 找两个对角线顶点之间的路径
- Wow64DisableWow64FsRedirection 读路径多线程崩溃没法找?
- 回溯法找迷宫最短路径
- 找证书路径 / 删除xcode缓冲文件
- 腾讯笔试-找矩阵路径最大值
- 《合成孔径雷达成像——算法与实现》之【6】仿真图3.6加窗
- 扩展欧几里德算法模版题 POJ 1061青蛙的约会
- zookeeper 集群配置
- 菜鸟个人总结之纯sql导入数据(oracle,pl/sql)
- tomcat启动时检测到循环继承而栈溢出的问题
- 单源最短路径<队列><可以返回再找>
- c++ 异常处理 的不足
- 堆和栈访问效率
- PL/SQL 基础
- nsoj 4714 次方求模
- Weka源码分析(4)——算法系统
- 慎用MySQL replace语句
- 学习前端我推荐这5本书
- hbase 备份HMatser服务——完全分布式