问题及代码:
/*求最短路径算法
用途:可用于交通系统、营救最优路径
*/
#include<stdio.h>
int n,m,p,q,min=999999;
int a[50][51],book[50][51];
void dsf(int x,int y,int step)
{
//下一步四个方向的数组
int next[4][2]={(0,1),
(1,0),
(0,-1),
(-1,0)};
if(x==p && y==q)
{
if(step<min)
{
min=step;
return;
}
}
int k;
for(k=1;k<=4;k++)
{
x=x+next[k][0];//x一直在第一位,即0
y=y+next[k][1]; //y一直在第二位,即1
if(a[x][y]==0 && book[x][y]==0)//判断坐标是否为障碍物和标记
{
book[x][y]=1;
dsf(x,y,step+1);
book[x][y]=0;
}
return;
}
}
int main()
{
int i,j,startx,starty;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d %d",&n,&m);
scanf("%d %d %d %d",&startx,&starty,&p,&q);
dsf(startx,starty,0);
getchar();getchar();
return 0;
}