菜鸡的BFS~求大大佬们勿喷——马的遍历

emmm,菜鸡在这里记录一下BFS模板,给一个二逼青年,希望大家不要喷我。。。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <string>
using namespace std;
int a[400][400]/*棋盘*/,x,y,e=0,a2,b2;
int v[8][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{-2,1},{2,-1},{-2,-1}};//马的跳跃,双括号更加鲜明 
typedef struct{
	int x;
	int y;
}ghs;//坐标结构体 
ghs p,q,t;//坐标存入 
void bfs(int a1,int b1)
{
	p.x=a1-1;//坐标录入到结构体 
	p.y=b1-1;//同上 
	a[p.x][p.y]=e;// 貌似多余了。。 
	queue<ghs> w;//BFS开始,1.第一队列 
	w.push(p);//将所要找的点放入队列 
	while(w.size()!=0)//判断是否搜完 
	{
		q=w.front(); 
		w.pop();//取出第一个坐标 
		for(int z=0;z<8;z++)//寻找该点的联通点 
		{
			t.x=q.x+v[z][0];//开始移动坐标 
			t.y=q.y+v[z][1];
			if(t.x>=0&&t.x<x&&t.y>=0&&t.y<y&&a[t.x][t.y]==0)//符合要求 
			{
			    if(t.x!=a1-1||t.y!=b1-1)//确认不为最开始的格子 
			{
				a[t.x][t.y]=a[q.x][q.y]+1;//标记几次到达(最短) 
				w.push(t);//将该点放入队列 
			}
			}
		}
	}
	return ;//结束 
}
int main()
{
	scanf("%d%d%d%d",&x,&y,&a2,&b2);
	bfs(a2,b2);
	for(int i=0;i<x;i++)
	{for(int j=0;j<y;j++)
	{
	    if(a[i][j]==0)// 无法到达 
        {
            if(i!=a2-1||j!=b2-1)//不是初始点 
            {
                a[i][j]=-1;//标记无法到达 
            }
        }
		printf("%-5d",a[i][j]);//输出 
	}
	printf("\n");//换行 
	}
	return 0;//结束 

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值