44分,和直接cout<<-1没有区别,救救孩子吧
查看原帖
44分,和直接cout<<-1没有区别,救救孩子吧
529038
Butterfly__qwq楼主2022/1/27 15:22
#include<bits/stdc++.h>
using namespace std;
int Map[9][9],n,m,hp=6,sx,sy,min_ans=1e9,ans;
bool vis[9][9][7];
const int dx[]={-1,1,0,0};
const int dy[]={0,0,-1,1};
void dfs(int x,int y)
{
	int newx,newy,f=0,f2=0;
	if(Map[x][y]==3)
	{
		if(ans<min_ans)min_ans=ans;
		ans=f;
		return;
	}
	for(int i=0;i<4;i++)
	{
		newx=x+dx[i];
		newy=y+dy[i];
		ans++;
		if(newx<0||newx>=n||newy<0||newy>=m)continue;
		if(Map[newx][newy]==0)continue;
		cout<<hp<<' '<<Map[newx][newy]<<'\n';
		if(hp==1&&Map[newx][newy]!=4)continue;
		if(vis[newx][newy][hp])
		{
			hp=f2;
			continue;
		}
		if(Map[newx][newy]==4)hp=6;
		else hp--;
		f=ans;
		f2=hp;
		vis[newx][newy][hp]=true;
		dfs(newx,newy);
		vis[newx][newy][hp]=false;
	}
}
int main()
{
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			cin>>Map[i][j];
			if(Map[i][j]==2)
			{
				sx=i;
				sy=j;
			}
		}
	}
	vis[sx][sy][6]=true;
	dfs(sx,sy);
	if(min_ans==1e9)cout<<-1;
	else cout<<min_ans;
	return 0;
}

在Map[0][0]和Map[1][0]之间不断往返

调了昨天一天+今天一上午(预计还要调一下午)

验证码祭( yyds

2022/1/27 15:22
加载中...