蒟蒻求助。。。
查看原帖
蒟蒻求助。。。
433518
名字好难取144楼主2021/11/8 22:00

调了好久。。。(人都要爆了)

我以左上角为边界

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define ll long long 
using namespace std;
const int N=5e5+10;

struct node{
	int x,y,sum,dir;
}t,tt;

int cx[5]={0,0,1,0,-1};
int cy[5]={0,1,0,-1,0};

bool a[100][100];
bool vis[100][100][4];

int n,m,sx,sy,ex,ey,dir_now;

bool flag;

char c;

bool judge(int tx,int ty,int dir)
{
	bool ok=1;
	if(tx>=1&&ty>=1&&tx<=n-2&&ty<=m-2&&vis[tx][ty][dir]==0)
	{
		if(a[tx][ty]==1||a[tx][ty+1]==1||a[tx+1][ty]==1||a[tx+1][ty+1]==1) return 0;
		vis[tx][ty][t.dir]=1;
		return 1;
	}
	return 0;
}

queue<node> q;

int main()
{		
	cin>>n>>m;
	memset(a,1,sizeof(a));
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
		{
			cin>>a[i][j];
		}
	}
	cin>>sx>>sy>>ex>>ey>>c;
	if(c=='E') dir_now=1;
	if(c=='S') dir_now=2;
	if(c=='W') dir_now=3;
	if(c=='N') dir_now=4;
	q.push((node){sx,sy,0,dir_now});
	vis[sx][sy][dir_now]=1;
	//E S W N -> 1 2 3 4
	while(!q.empty())
	{
		t=q.front(); q.pop();
		if(t.x==ex&&t.y==ey)
		{
			cout<<t.sum<<endl;
			return 0;
		}
		if(t.dir==1)
		{
			for(int i=1;i<=3;++i)
			{
				if(judge(t.x,t.y+i,t.dir)) q.push((node){t.x,t.y+i,t.sum+1,1});
			}
			if(judge(t.x+1,t.y,2)) q.push((node){t.x,t.y,t.sum+1,2});  
			if(judge(t.x,t.y-1,3)) q.push((node){t.x,t.y,t.sum+2,3});
			if(judge(t.x-1,t.y,4)) q.push((node){t.x,t.y,t.sum+1,4});
			continue;
		}
		else if(t.dir==2)
		{
			for(int i=1;i<=3;++i)
			{
				if(judge(t.x+i,t.y,t.dir)) q.push((node){t.x+i,t.y,t.sum+1,2});
			}
			if(judge(t.x,t.y-1,3)) q.push((node){t.x,t.y,t.sum+1,3});  
			if(judge(t.x-1,t.y,4)) q.push((node){t.x,t.y,t.sum+2,4});
			if(judge(t.x,t.y+1,1)) q.push((node){t.x,t.y,t.sum+1,1});
			continue;
		}
		else if(t.dir==3)
		{
			for(int i=1;i<=3;++i)
			{
				if(judge(t.x,t.y-i,t.dir)) q.push((node){t.x,t.y-i,t.sum+1,3});
			}
			if(judge(t.x-1,t.y,4)) q.push((node){t.x,t.y,t.sum+1,4});
			if(judge(t.x,t.y+1,1)) q.push((node){t.x,t.y,t.sum+2,1});
			if(judge(t.x+1,t.y,2)) q.push((node){t.x,t.y,t.sum+1,2});
			continue;
		}
		else if(t.dir==4)
		{
			for(int i=1;i<=3;++i)
			{
				if(judge(t.x-i,t.y,t.dir)) q.push((node){t.x-i,t.y,t.sum+1,4});
			}
			if(judge(t.x,t.y+1,1)) q.push((node){t.x,t.y,t.sum+1,1});
			if(judge(t.x+1,t.y,2)) q.push((node){t.x,t.y,t.sum+2,2});
			if(judge(t.x,t.y-1,3)) q.push((node){t.x,t.y,t.sum+1,3});
			continue;
		}
	}
	cout<<-1<<endl;
	return 0;
}
2021/11/8 22:00
加载中...