死循环,dalao帮忙看一下
  • 板块学术版
  • 楼主_Ch1F4N_
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/1/12 20:20
  • 上次更新2023/10/28 12:28:04
查看原帖
死循环,dalao帮忙看一下
520748
_Ch1F4N_楼主2022/1/12 20:20
#include<bits/stdc++.h>
class Map_B
{	

	public:
	bool Map[1001][1001];
	bool Range(int Ax,int Ay,int Bx,int By);
	int Short(int startx,int starty,int endx,int endy,int n,int m);
};
int Map_B::Short(int startx,int starty,int endx,int endy,int n,int m)
{
std::queue<int> x,y,s;	
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
int sum[1000][1000];
bool use[1000][1000];

for(int i=1;i<=n;i++)
{
	for(int j=1;j<=m;j++)
	{
		sum[i][j]=0;
		use[i][j]=Map[i][j];
	}
}
x.push(startx);
y.push(starty);
s.push(0);
use[startx][starty]=1;
  while(x.empty()==0&&y.empty()==0)
{
	for(int i=0;i<4;i++)
	{
		int nx=x.front()+dx[i];
		int ny=y.front()+dy[i];
		int ns=s.front()+1;
		if(nx<=n&&nx>=1&&ny<=m&&ny>=1&&use[nx][ny]==0)
		{
			use[nx][ny]=1;
			sum[nx][ny]=ns;
			x.push(nx);
			y.push(ny);
			s.push(ns);
		}
	}
	x.pop();
	y.pop();
	s.pop();
}
if((startx!=endx||starty!=endy)&&sum[endx][endy]==0)
sum[endx][endy]=-1;

return sum[endx][endy];
}
bool Map_B::Range(int Ax,int Ay,int Bx,int By)
{
	int tarx=Ax;
	int tary=Ay;
	while(Map[tarx][tary]==0)
	{
	tarx++;
	if(tarx==Bx&&tary==By)
	{
		return 1;
	}
	}
	 tarx=Ax;
	 tary=Ay;
		while(Map[tarx][tary]==0)
	{
	tary++;
	if(tarx==Bx&&tary==By)
	{
		
		return 1;
	}
	}
	 tarx=Ax;
	 tary=Ay;
		while(Map[tarx][tary]==0)
	{
	tarx--;
	if(tarx==Bx&&tary==By)
	{
		return 1;
	}
    }
     tarx=Ax;
	 tary=Ay;
		while(Map[tarx][tary]==0)
	{
	tary--;
	if(tarx==Bx&&tary==By)
	{
		return 1;
	}
    }
     tarx=Ax;
	 tary=Ay;
		while(Map[tarx][tary]==0)
	{
	tarx++;
	tary++;
	if(tarx==Bx&&tary==By)
	{
		return 1;
	}
  	}
  	 tarx=Ax;
	 tary=Ay;
		while(Map[tarx][tary]==0)
	{
	tarx++;
	tary--;
	if(tarx==Bx&&tary==By)
	{
		return 1;
	}
	}	
	 tarx=Ax;
	 tary=Ay;
		while(Map[tarx][tary]==0)
	{
	tarx--;
	tary--;
	if(tarx==Bx&&tary==By)
	{
		return 1;
	}
	}
	 tarx=Ax;
	 tary=Ay;
		while(Map[tarx][tary]==0)
	{
	tarx--;
	tary++;
	if(tarx==Bx&&tary==By)
	{
		return 1;
	}
	}
	return 0;
	
}
using namespace std;
int main()
{
	Map_B r;
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>r.Map[i][j];
		}
	}
	int startx,starty,endx,endy;
	cin>>startx>>starty>>endx>>endy;
	cout<<1;
	cout<<r.Short(startx,starty,endx,endy,n,m);
}
2022/1/12 20:20
加载中...