40分广搜,求助
查看原帖
40分广搜,求助
343245
Bigfish_楼主2021/5/23 10:25
#include <bits/stdc++.h>
using namespace std;
int n,m,x,y,i=0,j=1,k1,k2;
int a[410][410]={},o1[9]={0,-2,-2,-1,1,2,2,1,-1},o2[9]={0,-1,1,2,2,1,-1,-2,-2};
bool b[410][410]={};
int d[1010][4]={},zb[410][410]={};
int main()
{
	cin>>n>>m>>y>>x;//n行,m列;
	k1=x;k2=y;
	d[1][1]=x;d[1][2]=y;d[1][3]=0;//队列有x,y,步数;
	b[y][x]=1;
	zb[y][x]=0;
	while(i<j)
	{
		++i;//指向 
		for(int o=1;o<=8;++o)//8个方向 
		{
			k1=d[i][1]+o1[o];//x
			k2=d[i][2]+o2[o];//y
			int bu=d[i][3]+1;
			if(k1>=1&&k1<=m&&k2>=1&&k2<=n&&b[k2][k1]==0)
			{
				++j;
				b[k2][k1]=1;
				d[j][1]=k1;
				d[j][2]=k2;
				d[j][3]=bu;
				zb[k2][k1]=bu;
			}
		}
	}
	for(int t1=1;t1<=n;++t1)
	{
		for(int i1=1;i1<=m;++i1)
		{
			if(b[t1][i1]==0) printf("%-5d",-1);
			else printf("%-5d",zb[t1][i1]);
		}
		if(t1!=n) cout<<"\n";
	}
	return 0;
} 
2021/5/23 10:25
加载中...