(整活)80分shi山求调
查看原帖
(整活)80分shi山求调
1255837
Inracle楼主2024/6/28 16:02

诶嘿awa

#include<bits/stdc++.h>
#define N 110
using namespace std;
int n,ans,x,y,p[N][N];
struct node{
	int x,y,val,fx;
	node(int q,int w,int e,int r)
	{
		x=q; y=w; val=e; fx=r;
	}
};
queue<node> q;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			char c; cin>>c;
			if(c=='x') p[i][j]=-1;
			if(c=='A') q.push(node(i,j,1,0));
			if(c=='B') {x=i; y=j;}
		}
	}
	while(!q.empty())
	{
		node nd=q.front(); q.pop();
		if(nd.fx==1)
		{
			for(int i=nd.y-1;i>=1;i--)
			{
				if(p[nd.x][i]==0)
				{
					q.push(node(nd.x,i,nd.val,1));
					p[nd.x][i]=nd.val;
				}
				else break;
			}
			for(int i=nd.y+1;i<=n;i++)
			{
				if(p[nd.x][i]==0)
				{
					q.push(node(nd.x,i,nd.val,1));
					p[nd.x][i]=nd.val;
				}
				else break;
			}
			if(p[nd.x+1][nd.y]==0&&nd.x<n) 
			{
				q.push(node(nd.x+1,nd.y,nd.val+1,2));
				p[nd.x+1][nd.y]=nd.val+1;
			}  
			if(p[nd.x-1][nd.y]==0&&nd.x>1) 
			{
				q.push(node(nd.x-1,nd.y,nd.val+1,2));
				p[nd.x-1][nd.y]=nd.val+1;
			}
		}
		else if(nd.fx==2)
		{
			for(int i=nd.x-1;i>=1;i--)
			{
				if(p[i][nd.y]==0)
				{
					q.push(node(i,nd.y,nd.val,2));
					p[i][nd.y]=nd.val;
				}
				else break;
			}
			for(int i=nd.x+1;i<=n;i++)
			{
				if(p[i][nd.y]==0)
				{
					q.push(node(i,nd.y,nd.val,2));
					p[i][nd.y]=nd.val;
				}
				else break;
			}
			if(p[nd.x][nd.y+1]==0&&nd.y<n) 
			{
				q.push(node(nd.x,nd.y+1,nd.val+1,1));
				p[nd.x][nd.y+1]=nd.val+1;
			}
			if(p[nd.x][nd.y-1]==0&&nd.y>1) 
			{
				q.push(node(nd.x,nd.y-1,nd.val+1,1));
				p[nd.x][nd.y-1]=nd.val+1;
			}
		}
		else
		{
			for(int i=nd.y-1;i>=1;i--)
			{
				if(p[nd.x][i]==0)
				{
					q.push(node(nd.x,i,nd.val,1));
					p[nd.x][i]=nd.val;
				}
				else break;
			}
			for(int i=nd.y+1;i<=n;i++)
			{
				if(p[nd.x][i]==0)
				{
					q.push(node(nd.x,i,nd.val,1));
					p[nd.x][i]=nd.val;
				}
				else break;
			}
			for(int i=nd.x-1;i>=1;i--)
			{
				if(p[i][nd.y]==0)
				{
					q.push(node(i,nd.y,nd.val,2));
					p[i][nd.y]=nd.val;
				}
				else break;
			}
			for(int i=nd.x+1;i<=n;i++)
			{
				if(p[i][nd.y]==0)
				{
					q.push(node(i,nd.y,nd.val,2));
					p[i][nd.y]=nd.val;
				}
				else break;
			}
		}
	}    
	if(p[x][y]!=-1) cout<<p[x][y]-1;
	else cout<<-1;
	return 0;
}
2024/6/28 16:02
加载中...