求助,90分,只WA了第11个点
查看原帖
求助,90分,只WA了第11个点
229390
zhangjiaming蒟蒻楼主2021/5/11 00:37

大佬们帮忙看一下哪里错了

#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#define M 1010
#define N 1000000
#define LL long long
using namespace std;
int dx[5]={0,0,1,-1};
int dy[5]={1,-1,0,0};
int map[M][M],vis[M][M],n,m,xx,startx,starty,endx,endy,ans=N;
void dfs(int x,int y,int tot,int sum)
{	
	if(x==endx&&y==endy)
	{
		ans=min(ans,tot);
		return ;
	}
	else
	{
		for(int i=0;i<4;i++)
		{
			int xx=x+dx[i];
			int yy=y+dy[i];
			if(sum>1&&map[xx][yy]!=1&&vis[xx][yy]!=1&&xx>=0&&xx<n&&yy>=0&&yy<m)
			{
				vis[x][y]=1;
				if(map[xx][yy]==2) dfs(xx,yy,tot+1,6);
				else dfs(xx,yy,tot+1,sum-1);
				vis[x][y]=0; 
			}
		}
	}
}
int main()
{
	std::ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
	for(int j=0;j<m;j++) 
	{
		cin>>xx;
		if(xx==0) map[i][j]=1;
		if(xx==2)
		{
			startx=i;
			starty=j;
		}
		if(xx==3)
		{
			endx=i;
			endy=j; 
		} 
		if(xx==4) map[i][j]=2;
	}
	dfs(startx,starty,0,6);
	if(ans==N) cout<<-1;
	else cout<<ans;
	return 0;
}
/*
*/
2021/5/11 00:37
加载中...