20分求改
  • 板块题目总版
  • 楼主furina_1013
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/7/31 16:14
  • 上次更新2024/7/31 17:58:21
查看原帖
20分求改
794188
furina_1013楼主2024/7/31 16:14

P1443 马的遍历 广搜枚举

#include<bits/stdc++.h>
using namespace std;
int n,m,x_1,y_1;
int X[10]={0,1,2,1,2,-1,-2,-1,-2};
int Y[10]={0,2,1,-2,-1,3,1,-2,-1};
int a[405][405];
int vis[405][405];
struct node
{
	int  x,y;
};
inline void BFS()
{
	queue<node>q;
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)vis[i][j]=-1;
	vis[x_1][y_1]=0;
	q.push((node){x_1,y_1});
	while(!q.empty())
	{
		node now=q.front();q.pop();
		for(int i=1;i<=8;i++)
		{
			int xi=now.x +X[i];
			int yi=now.y +Y[i];
			if(xi<1 || yi<1 || xi>n || yi>m)continue;//越界的 
			if(vis[xi][yi]!=-1)continue;//不能走的 
			vis[xi][yi]=vis[now.x ][now.y ]+1;
			q.push((node){xi,yi});
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>x_1>>y_1;
	BFS();
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cout<<vis[i][j]<<"    ";
		}
		cout<<endl;
	}
}
2024/7/31 16:14
加载中...