Dijkstra模板
void Dijkstra(int u)
{
int i;
for(i=0;i<n;i++)
{
dis[i]=map[u][i]; //dis记录u到i的距离
vis[i]=0;
}
dis[u]=0;
vis[u]=1; //vis标志是否被遍历过
int j,k,temp;
for(i=0;i<n;i++)
{
temp=INF;
for(j=0;j<n;j++)
{
if(!vis[j]&&temp>dis[j])
{
k=j;
temp=dis[j]; //记录最小值
}
}
if(temp==INF) break;
vis[k]=1;
for(j=0;j<n;j++)
if(!vis[j]&&dis[j]>dis[k]+map[k][j])
dis[j]=dis[k]+map[k][j];
}
}
Floyd模板
核心代码:
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(g[i][j]>g[i][k]+g[k][j]) g[i][j]=g[i][k]+g[k][j];