学习产出:
昨天看了看龙哥的博客今天终于懂了并且写出了广度优先搜索如下:
#include <stdio.h>
#define max 100000
int go[4][2]={{0,-1},{0,1},{-1,0},{1,0}};//向上下左右4个方向移动
int d[10][10];//地图大小
struct wh{
int x;//横坐标
int y;//纵坐标
int num;//到这个位置所需花费的时间
};
struct wh a[max];
int main(){
int i,j,x1,y1,x2,y2,xa,ya;//x1,y1,x2,y2分别作为开始坐标和终点坐标,xa,ya作为现在的坐标
int flag,sta,end;//flag标记是否到达,sta与end分别表示开始点与结束点
while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF){
getchar();
sta=1,end=2;
a[sta].x=x1;//输入起始横坐标
a[sta].y=y1;//输入起始纵坐标
a[sta].num=0;
flag=0;//初始化标记
while(sta<end){
if(x1x2&&y1y2){
flag=1;
break;//如果开始坐标和结束坐标相同则结束
}
for(i=0;i<4;i++){//向4个方向进行搜索
xa=a[sta].x+go[i][0];
ya=a[sta].y+go[i][1];
if(xa<1||xa>10||ya<1||ya>10){//防止跑出地图
continue;
}
a[end].x=xa;
a[end].y=ya;
a[end].num=a[sta].num+1;
end++;
if(xax2&&yay2){
flag=1;
goto out;
}
}
sta++;//进行下一圈搜索
}
out://跳出嵌套循环
if(flag==1){
printf(“已到达结束坐标。\n到达结束坐标的步数为:%d\n”,a[end-1].num);
}
else{
printf(“未到达结束坐标。\n”);
}
}
return 0;
}