最短路径算法
#include<stdio.h>
#define N 11
#define M 1000000
struct node
{
int num; //本来序号
int lin; //临时性标记
};
void main()
{
int i,j,t,k,m,test;
node l[N+1];
int w[N+1][N+1]={0};
int cnt=0;//统计节点数
int c[N+1]={0}; //存放节点
w[1][2]=676;
w[1][3]=1813;
w[2][4]=842;
w[2][5]=511;
w[3][5]=695;
w[3][6]=811;
w[4][7]=110;
w[4][8]=967;
w[5][9]=943;
w[6][10]=1376;
w[7][8]=639;
w[8][9]=902;
w[8][11]=607;
w[9][10]=367;
w[9][11]=672;
for(i=1;i<N+1;i++)
for(j=1;j<N+1;j++)
if(w[i][j] ==0)
w[i][j]=M;
for(i=1;i<N+1;i++)
l[i].num=i;
l[1].lin=0;
for(i=2;i<N+1;i++)
l[i].lin=M;
for(i=2;i<N+1;i++)
l[i].lin=w[1][i];
for(i=2;i<N+1;i++)
{
for(j=i;j<N+1;j++)
{
t=l[i-1].lin+w[i-1][j];
if(t<l[j].lin)
l[j].lin=t;
}
for(k=1;k<N+1;k++)
printf("%d ",l[k].lin);
printf("\n");
test= l[i].lin;
m=i;
for(k=m;k<N+1;k++)
{
if(test>l[k].lin)
{
test=l[k].lin;
m=k;
}
}
if(m !=i)
{
node temp = l[i];
l[i]=l[m];
l[m]=temp;
}
}
for(k=1;k<N+1;k++)
for(m=k+1;m<N+1;m++)
if(l[k].num>l[m].num)
{
node temp=l[k];
l[k]=l[m];
l[m]=temp;
}
i=N;
j=N-1;
while(j>0)
{
if(l[i].lin == l[j].lin+w[j][i])
{
i=j;
c[cnt]=j;
cnt++;
j--;
}
else
j--;
}
printf("最短路径如下:\n");
for(i=cnt-1;i>=0;i--)
{
printf("p-->[%d]\n",c[i]);
}
printf("p-->[%d]\n",N);
}