单源最短路径<Dijkstra>
2016-11-16 23:37
281 查看
由一个源头,也就是n1开始到n2。
f[?]代表从终点到?的距离,刚开始f[n2]就是确定了终点,然后每个f[?]为距离
需要弄明白map的判断那里
#include <iostream>
#include <string.h>
#define maxn 9999
using namespace std;
int main(){
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
int n,n1,n2,x;
cin >> n >> n1 >> n2; //n表示有n个点,从n1到n2的距离
int map[n+1][n+1];
int f[n+1],c[n+1];
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;
while(t1&&t2&&t3){
cin >> t1 >> t2 >> t3;
map[t1][t2]=t3;
}
for(i=1;i<=n;i++)
f[i]=maxn;
f[n2]=0;
for(i=n;i>0;i--)
for(j=1;j<=n;j++)
if(map[i][j]!=-1&&f[j]!=maxn&&f[j]+map[i][j]<f[i]){
f[i]=f[j]+map[i][j];
//c[i]=j;
}
cout << f[n1]<<endl;
/*x=n1;
while(x){
printf("%d",x);
x=c[x];
}*/return 0;
}
f[?]代表从终点到?的距离,刚开始f[n2]就是确定了终点,然后每个f[?]为距离
需要弄明白map的判断那里
#include <iostream>
#include <string.h>
#define maxn 9999
using namespace std;
int main(){
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
int n,n1,n2,x;
cin >> n >> n1 >> n2; //n表示有n个点,从n1到n2的距离
int map[n+1][n+1];
int f[n+1],c[n+1];
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;
while(t1&&t2&&t3){
cin >> t1 >> t2 >> t3;
map[t1][t2]=t3;
}
for(i=1;i<=n;i++)
f[i]=maxn;
f[n2]=0;
for(i=n;i>0;i--)
for(j=1;j<=n;j++)
if(map[i][j]!=-1&&f[j]!=maxn&&f[j]+map[i][j]<f[i]){
f[i]=f[j]+map[i][j];
//c[i]=j;
}
cout << f[n1]<<endl;
/*x=n1;
while(x){
printf("%d",x);
x=c[x];
}*/return 0;
}
相关文章推荐
- Dijkstra<单源最短路径>
- <菜鸟学算法-Dijkstra求最短路径>
- dijkstra算法求单源最短路径
- Dijkstra不能得到含有负权边图的单源最短路径
- 单源最短路径——Dijkstra
- Dijkstra单源最短路径
- 单源最短路径问题[Dijkstra实现]
- Dijkstra单源最短路径,适合稠密图,顶点少,边多(c语言)
- 贪心算法 最小生成树prim与单源最短路径dijkstra
- Dijkstra算法求单源最短路径
- 单源最短路径问题--Dijkstra
- Dijkstra算法求解单源最短路径
- 贪心算法--Dijkstra单源最短路径
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- hdu 2544 单源最短路径(邻接矩阵Dijkstra实现)
- 单源最短路径(1):Dijkstra 算法
- poj_1502_MPI Maelstrom(Dijkstra求单源最短路径)
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- Dijkstra单源最短路径,POJ(2387)
- Dijkstra不能得到含有负权边图的单源最短路径