基本思想
Dijstra 算法基本思想:每次找到离源点最近的一个顶点,然后以该顶点为中心扩展,最终得到源点到其余所以点的最短路径
所需数据结构(邻接矩阵为例)
int e[N][N];//存放图
int dis[N]; //存放源点到顶点的距离
int book[N]; //标记是否访问
int inf=0x3f3f3f;//无穷大
代码
int Dijstra(int start,int end)//start 起点,end 终点
{
for(i=1; i<=n; i++)
{
dis[i]=e[s][i];
}
for(i=1; i<=n; i++) book[i]=0;
book[s]=1;
for(i=1; <=n-1; i++)
{
minn=inf;
for(j=1; j<=n; j++)
{
if(book[j]==0 && dis[j]<minn)
{
minn=dis[j];
u=j;
}
}
if(minn==inf) break;
book[u]=1;
for(v=1; v<=n; v++)
{
if(e[u][v]<inf)
{
if(e[u][v]<inf)[添加链接描述](https://editor.csdn.net/md/?articleId=108041634)
{
if(dis[v]>dis[u]+e[u][v])
dis[v]= dis[u]+e[u][v];
}
}
}
}
return dis[end];
}
例题
板子题:HDU-2544
题解 HDU-2544
上下电梯:HDU - 1548
双边权问题: HDU - 3790
英文名建图: HDU - 2112
多起点问题: HDU - 2680