求图中一个点到另一个点的最短路径长度
1.递归公式
2.代码实现
int large=INT_MAX;
int MostShortPath(int **G,int len,int i,int j) //邻接矩阵G用来表示图,G[i.i]=0;若Vi不指向Vj,则G[i,j]=INT_MAX;
{
static int *A=new int[len];
for(int k=0;k<len;k++)
A[k]=0;
if(i==j)
return 0;
if(A[i]>0)
return A[i];
int min=large;
int temp;
for(int k=0;k<5;k++)
{
if( *((int*)G+i*len+k )>0&&*((int *)G+i*len+k)!=large )
{
temp=(*((int *)G+i*len+k))+MostShortPath(G,len,k,j);
if(min>temp)
min=temp;
}
}
A[i]=min;
return A[i];
}
3.举例:
int main()
{ int G[5][5]={{0,1,2,large,large},
{large,0,large,5,large},
{large,3,0,3,1},
{large,large,large,0,large},
{large,large,large,1,0}};
int n=MostShortPath((int**)G,5,0,3);
std::cout<<"最短路径长度为:"<<n<<std::endl;
return 0;
}
结果: