华师一附中OI组
标题:
Dijkstra方法求最短路径
[打印本页]
作者:
diggersun
时间:
2015-11-1 23:44
标题:
Dijkstra方法求最短路径
本帖最后由 diggersun 于 2016-3-9 15:19 编辑
经典的贪心方法,或者叫启发式广度优先搜索,尽管现在人们更喜欢SPFA,但是还是了解一下它吧。TYVJ1031 热浪,经典的题目,我的做法:
#include <iostream>
using namespace std;
int g[2600][2600];
bool flag[2600];
int rount[2600];
int T, C, Ts, Te, rs, re, ci;
int FindMin()//找所有的未标号的顶点中路径的最小值
{
int Min,Temp,i;
Min=999999999;
for (i=1; i<=T; i++)
if ((!flag[i]) &&(rount[i]<Min))
{
Temp=i;
Min=rount[i];
}
return Temp;
}
int main()
{
int i,j,k;
int shortest;
cin >> T >> C >> Ts >> Te;
for (i=1; i<=T; i++)
{
rount[i]=999999999;
for (j=i; j<=T; j++)
g[i][j]=g[j][i]=999999999;
}
for (i = 1; i <= C; i++)
{
cin >> rs >> re >> ci;
if (ci<g[rs][re]) g[rs][re]= g[re][rs] = ci;
}
flag[Ts]=1;
i=Ts;//从第一顶点开始
rount[i]=0;
do
{
shortest=99999999;
for (j=1; j<=T; j++)
if (!flag[j]) //本点没有被标号
if (rount[j]>rount[i]+g[i][j])
rount[j]=rount[i]+g[i][j];
i=FindMin();
flag[i]=1;
}
while (!flag[Te]);
cout<<rount[Te];
return 0;
}
复制代码
作者:
diggersun
时间:
2015-11-1 23:45
变形还是很多的,比如,求次短的路径。
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2