图中点到点最短路径长度

来源:互联网 发布:血族手游 知乎 编辑:程序博客网 时间:2024/05/01 03:53

求图中一个点到另一个点的最短路径长度

 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;}

结果:




0 0