图结构中应用的最多的就是最短路径的查找了,关于最短路径查找的算法主要有两种:迪杰斯特拉算法(Dijkstra)和Floyd算法。
其中迪杰斯特拉算法(Dijkstra)实现如下:
原理就是不断寻找当前的最优解:
void main() { int V[Max][Max]={0,8,32,Infinity,Infinity, 12,0,16,15,Infinity, Infinity,29,0,Infinity,13, Infinity,21,Infinity,0,7, Infinity,Infinity,27,19,0 }; bool sign[Max]={false}; int D[Max]; for(int i=0;i<Max;i++) { D[i]=V[0][i]; } int poineer[Max]={0}; sign[0]=true; int min=0;int k=0; for(int i=1;i<Max;i++) { min=Infinity; for(int j=0;j<Max;j++) { if(!sign[j] && D[j]<min) { min=D[j]; k=j; } } sign[k]=true; for(int j=0;j<Max;j++) { if(!sign[j] && min+V[k][j]<D[j]) { poineer[j]=k; D[j]=min+V[k][j]; } } } for(int i=0;i<Max;i++) { cout<<D[i]<<" "; } cout<<endl; for(int i=0;i<Max;i++) { cout<<poineer[i]<<" "; } }
原文:http://blog.csdn.net/daida2008/article/details/39530023