图结构中应用的最多的就是最短路径的查找了,关于最短路径查找的算法主要有两种:迪杰斯特拉算法(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]<<" ";
}
}