help 70
查看原帖
help 70
767863
封禁用户楼主2024/7/1 15:48

代码


#include<iostream>
#include<cstdio>
using namespace std;
int n,s,s1,s2,s3,s4,s5;
char a[1010][1010];
int dx[5]={0,0,1,0,-1};
int dy[5]={0,-1,0,1,0};
int qx[5]={0,1,1,-1,-1};
int qy[5]={0,-1,1,1,-1};
int dfs(int x,int y,int k)
{
	for(int i=1;i<=4;i++)
	{
		int xx=x+dx[i];
		int yy=y+dy[i];
		int xxx=x+qx[i];
		int yyy=y+qy[i];
		if(xx>0&&xx<=n&&yy>0&&yy<=n&&a[xx][yy]!='*')
		{
			if(a[x][y]=='A')
			{
				dfs(xx,yy,k+1);
			}
			else if(a[x][y]=='B')
			{
				for(int j=1;j<=2;j++)
				{
					if(a[xx][yy]!='*')
					{
						dfs(xx,yy,k+1);
					}
				}
			}
			else if(a[x][y]=='C')
			{
				if(xxx>0&&xxx<=n&&yyy>0&&yyy<=n&&a[xxx][yyy]!='*')
				{
					dfs(xxx,yyy,k+2);
				}
			}
			else if(xx==n&&yy==n)
			{
				return k;
			}
		}
		else if(a[xx][yy]=='*')
		{
			return 0;
		}
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	a[1][1]='*';
	a[1][n]='*';
	a[n][1]='*';
	s=dfs(1,1,1);
	s1=dfs(1,n,1);
	s2=dfs(n,1,1);
	s3=max(s,s1);
	s4=max(s2,s3);
	if(s4==0||s4==8)
	{
		cout<<"No answer";
	}
	else
	{
		cout<<s4;
	}
	return 0;
}

2024/7/1 15:48
加载中...