1. 程式人生 > >最短路算法

最短路算法

class str word i++ spa ret clas mic func

Floyd(hdu 1874)


for(int k=0;k<n;k++)
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			e[i][j]=min(e[i][j],e[i][k]+e[k][j]);


k為枚舉點,dp思想

Dijskstra(hdu 2112)

int dij()
{
	v[1]=1;
	dis[1]=0;
	//cout<<num<<endl;
	for(int i=2;i<num;i++)
	{
		dis[i]=road[1][i];
	}
	for(int i=1;i<num;i++)
	{
		int mn=inf;
		int k=-1;
		for(int j=1;j<num;j++)
		{
			if(!v[j]&&dis[j]<mn)
			{
				mn=dis[j];
				k=j;
			}
		}
		if(k==-1) break;
		v[k]=1;
		for(int j=1;j<num;j++)
		{
			if(!v[j])
			{
				if(dis[j]>road[k][j]+dis[k])
				{
					dis[j]=road[k][j]+dis[k];
				}
				//cout<<dis[j]<<endl;
			}
		}
	}
	return dis[2];
}


最短路算法