语法有一个字母错误,哪位兄台给看一下把.有详细介绍
#include"stdio.h"
#define MAX_LEN 10000
#define n 6
int len; //当前走过的犁镜的权值和
int min;//当前找到的最短路径的和
int k;//当前最短的步数
int c[n];//最短路
//递归子过程,从X到Y,总步数为Z
void fd(int*gr,int x,int y,int z,int*a,bool*b)
//这句里bool*b中间的*号被提示错误.错误提示是说:说明语法错误.而且只有*号变成兰色,bool和b都好好的,在*号的下面有一道蓝线提示*号错误,请大家指点这个*号到底错在啥地方了\如何修改呢这个语句,这个程序里就这一个错误了,还请大家指点.这是个求最短路径的小程序,我找了半个月才找见的.谢谢
{
int f,j;
for(f=0;f<n;f++){ //让F从0到N-1寻找邻结点
if(gr[x*n+f]>0&&b[f]==false){ //判断是否F点在X邻域并且F点没有走过
a[z]=f; //走到F点(F点进栈)
b[f]=true; //记录F点已经走过
len=len+gr[x*n+f]; //在当前路径长度中增加新边长
if(f!=y) //如果没有走道Y点就继续走
fd(gr,f,y,z+1,a,b);
else if(len<min){//走到Y就看当前长度是否比当前最小长度小,如果当前小就更新
k=z;//先记录下当前犁镜的点数
min=len;//以当前长度作为当前最小长度
for(j=1;j<k+1;j++)//依次更换当前最短路径中的每个点
c[j]=a[j];
}//结束更新
len=len-gr[x*n+f];//退掉F点,先在当前路径长度中减去退出的一条边长
b[f]=false;//把F点恢复为没有走过
}//结束X邻域的搜索
}
}
//在N个点的网上求X到Y的最短路径,关联距阵是GR
void shortest(int*gr,int x,int y,int*a,bool*b)
{
int i;
min=MAX_LEN;
for(i=0;i<n;i++)
b[i]=false;
a[0]=x;
b[x]=true;
len=0;
fd(gr,x,y,1,a,b);
for(i=0;i<k+1;i++)
printf("%d,",c[i]);
printf("\n");
printf("the shortest length is %d.\n",min);
}
void main()
{
int gr[n][n]={{0,1,2,0,0,0},
{1,0,1,3,1,0},
{2,1,0,0,0,12},
{0,3,0,0,1,0},
{0,1,0,1,0,8},
{0,0,12,0,8,0}};
int a[n];
bool b[n];
shortest((int*)gr,0,5,a,b);
}
[此贴子已经被作者于2005-9-12 0:29:45编辑过]