哪位大佬帮我调一下40pts
查看原帖
哪位大佬帮我调一下40pts
362167
b1468821672楼主2022/10/5 19:41
#include<iostream>
using namespace std;
int n,m,minn=0x3f3f3f3f,oran=0,purx=0,pury=0;
int map[2050][2050];
bool vis[2050][2050];
int xx[]={0,1,0,-1,0};
int yy[]={0,0,1,0,-1};
void dfs(int x,int y,int sum)
{
//	cout<<x<<" "<<y<<endl;
	if(x==n&&y==m)
	{
		minn=min(sum,minn);
		return;
	}
	if(map[x][y]==4)
	{
		int cx=x+purx,cy=y+pury;
		if(cx>n||cy>m)return;
		if(cx<=0||cy<=0)return;
		if(vis[cx][cy])return;
		if(map[cx][cy]==3||!map[cx][cy])
		{
			for(int i=1;i<=4;i++)
			{
				int cxx=x+xx[i],cyy=y+yy[i];
				if(cxx>n||cyy>m||cx<=0||cy<=0)continue;
				if(vis[cx][cy])continue;
				if(map[cxx][cyy]==3||!map[cxx][cyy])continue;
				if(map[cxx][cyy]==2)oran=1;
				if(map[cxx][cyy]==4)
				{
					oran=0;
					purx=xx[i],pury=yy[i];
					dfs(cxx,cyy,sum+1);
					return;
				}
				vis[cxx][cyy]=1;
				dfs(cxx,cyy,sum+1);
				vis[cxx][cyy]=0;
			}
			return;
		}
		if(map[cx][cy]==2)oran=1;
		if(map[cx][cy]==4)
		{
			oran=0;
			dfs(cx,cy,sum+1);
			return;
		}
		vis[cx][cy]=1;
		dfs(cx,cy,sum+1);
		vis[cx][cy]=0;
		return;
	}
	for(int i=1;i<=4;i++)
	{
		int cx=x+xx[i],cy=y+yy[i];
		if(cx>n||cy>m)continue;
		if(cx<=0||cy<=0)continue;
		if(vis[cx][cy])continue;
		if(!map[cx][cy])continue;
		if(map[cx][cy]==3&&!oran)continue;
		if(map[cx][cy]==2)oran=1;
		if(map[cx][cy]==4)
		{
			oran=0;
			purx=xx[i],pury=yy[i];
//			cout<<purx<<" "<<pury<<endl;
			dfs(cx,cy,sum+1);
			return;
		}
		vis[cx][cy]=1;
		dfs(cx,cy,sum+1);
		vis[cx][cy]=0;
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>map[i][j];
		}
	}
	dfs(1,1,0);
	if(minn==0x3f3f3f3f)cout<<"-1";
	else cout<<minn;
}
2022/10/5 19:41
加载中...