10分MLE求助!!!
查看原帖
10分MLE求助!!!
548118
caizihaolg楼主2023/1/9 22:34

cpp

#include<bits/stdc++.h>
using namespace std;
int a[60][60];
struct node{
	int x,y,cnt;
	char f;
	node():x(),y(),cnt(),f(){}
	node(int x,int y,int cnt,char f):x(x),y(y),cnt(cnt),f(f){}
};
queue<node> q;
int n,m;
void szfw(int x,int y,int ans,char ff)
{
	if(ff=='S')
	{
		for(int i=1;i<=3;i++)
			if(x+i<=n && a[x+i][y]==0)
				q.push(node(x+i,y,ans+1,'S'));
	}
	if(ff=='N')
	{
		for(int i=1;i<=3;i++)
			if(x-i>=1 && a[x-i][y]==0)
				q.push(node(x-i,y,ans+1,'N'));
	}
	if(ff=='E')
	{
		for(int i=1;i<=3;i++)
			if(y-i>=1 && a[x][y-i]==0)
				q.push(node(x,y-i,ans+1,'E'));
	}
	if(ff=='W')
	{
		for(int i=1;i<=3;i++)
			if(y+i<=m && a[x][y+i]==0)
				q.push(node(x,y+i,ans+1,'W'));
	}
}
int sx,sy,ex,ey;
char fx[4]={'S','N','E','W'};
char F;
void dfs()
{
	q.push(node(sx,sy,0,F));
	bool fl=false;
	while(q.size())
	{
		int x=q.front().x,y=q.front().y,ans=q.front().cnt;
		char f=q.front().f;q.pop();
		if(x==ex && y==ey)
		{
			fl=true;
			printf("%d",ans);
			break;
		}
		szfw(x,y,ans,f);
		//if(ans>Min)
		//	continue;
		for(int i=0;i<4;i++)
			q.push(node(x,y,ans+1,fx[i]));
	}
	if(!fl)
		printf("-1");
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&a[i][j]);
	scanf("%d%d%d%d%c",&sx,&sy,&ex,&ey,&F);
	dfs();
	
	return 0;
}
2023/1/9 22:34
加载中...