广度优先搜索

学习产出:

昨天看了看龙哥的博客今天终于懂了并且写出了广度优先搜索如下:

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值