玄关,求助!
查看原帖
玄关,求助!
763299
Storm_Lightning楼主2024/8/25 00:18
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
char s[31][31];
int dis[31][31][5];
int sx,sy,fx,fy,fang;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
int ans=INT_MAX;
void dfs(int row,int col,int f,int sum)
{
	if(dis[row][col][f]<=sum||ans<=sum)
	{
		return;
	}
	dis[row][col][f]=sum;
	if(s[row][col]=='F')
	{
		ans=min(ans,sum);
	}
	int flag=0;
	if(s[row+dx[f]][col+dy[f]]!='.')
	{
		flag=1;
		dfs(row+dx[f],col+dy[f],f,sum);
	}
	if(s[row+dx[(f+1)%4]][col+dy[(f+1)%4]]!='.')
	{
		flag=1;
		dfs(row+dx[(f+1)%4],col+dy[(f+1)%4],(f+1)%4,sum+1);
	}
	if(s[row+dx[(f+3)%4]][col+dy[(f+3)%4]]!='.')
	{
		flag=1;
		dfs(row+dx[(f+3)%4],col+dy[(f+3)%4],(f+3)%4,sum+5);
	}
	if(flag==0&&s[row+dx[(f+2)%4]][col+dy[(f+2)%4]]!='.')
	{
		flag=1;
		dfs(row+dx[(f+2)%4],col+dy[(f+2)%4],(f+2)%4,sum+10);
	}
	return;
}
signed main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>s[i];
		for(int j=1;j<=m;j++)
		{
			if(s[i][j]=='F')
			{
				fx=i; fy=j;
			}
			if(s[i][j]=='E')
			{
				sx=i; sy=j;
				fang=4;
			}
			if(s[i][j]=='W')
			{
				sx=i; sy=j;
				fang=2;
			}
			if(s[i][j]=='N')
			{
				sx=i; sy=j;
				fang=1;
			}
			if(s[i][j]=='S')
			{
				sx=i; sy=j;
				fang=3;
			}
		}
	}
	dfs(sx,sy,fang,0);
	cout<<ans<<endl;
	return 0;
}
2024/8/25 00:18
加载中...