算法分析与实践
-
问题
在有向图 G=(V,E) 使用Dijkstra算法找到由顶点 V0 到其余各点的最短值。 -
解析
Dis初值为0;
从a行开始找可行并且距离最近的下一个点为b,Dis=0+1=1;
找到b之后,从b行开始找可行并且距离最近的下一个点为d,Dis=1+2=3;
找到d之后再从d行开始找可行并且距离最近的下一个点为f,Dis=3+8=11;
找到f之后再从f行开始找可行并且距离最近的下一个点为e,Dis=11+2=13;
找到e之后再从e行开始找可行并且距离最近的下一个点为g,Dis=13+2=15;
找到g之后再从g行开始找可行并且距离最近的下一个点为h,Dis=15+3=18;
输出Dis=18;
结束。 -
设计
[核心伪代码]
void Dijkstra(int D)
{
memset(vis,0,sizeof(vis));
for(int t=1;t<=n;t++)
{
dis[t]=map[D][t];
}
vis[D]=1;
for(int t=1;t<n;t++)
{
int minn=Inf,temp;
for(int i=1;i<=n;i++)
{
if(!vis[i]&&dis[i]<minn)
{
minn=dis[i];
temp=i;
}
}
vis[temp]=1;
for(int i=1;i<=n;i++)
{
if(map[temp][i]+dis[temp]<dis[i])
{
dis[i]=map[temp][i]+dis[temp];
}
}
}
}
4. 分析
[算法复杂度推导]
5. 源码
[github源码地址]
https://github.com/xujinyuanky/-/tree/master