58分求助!!!
查看原帖
58分求助!!!
234356
方杰123楼主2020/10/15 21:51

不知道怎么回事全WA了

求助!!!

#include<bits/stdc++.h>
#define N 301
using namespace std;

struct bag{
	int x,y,step;
};
struct node {
	int x,y;
}f[27][2];

queue < bag > q;

int tot[30];
int n,m,fx,fy,ex,ey;
int mp[N][N];
bool bk[N][N];
int nx[5]={0,1,0,-1,0};
int ny[5]={0,0,1,0,-1};

int read()
{
	int x=0,f=1;
	char c=getchar();
	while(c>'9'||c<'0')
	{
		if(c=='-')
			f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=(x<<1)+(x<<3)+(c^48);
		c=getchar();
	}
	return x*f;
}

void bfs()
{
	bag t1,t2,t3;
	t1.x=fx,t1.y=fy,t1.step=0;
	q.push(t1);
	while(!q.empty())
	{
		t2=q.front();
		q.pop();
		if(t2.x==ex && t2.y==ey)
		{
			cout<<t2.step; 
			return;
		}
		for(int i=1;i<=4;i++)
		{
			t3.x=t2.x+nx[i];
			t3.y=t2.y+ny[i];
			t3.step=t2.step+1;
			if(!bk[t3.x][t3.y] && !mp[t3.x][t3.y] && t3.x>0 && t3.y>0 && t3.x<=n && t3.y<=m)
			{
				bk[t3.x][t3.y]=true;
				q.push(t3);
 			}
 			if(!bk[t3.x][t3.y] && mp[t3.x][t3.y]==2)
 			{
 				int tx,ty;
				for(int j=1;j<=26;j++)
					for(int k=0;k<=1;k++)
						if(f[j][k].x==t3.x && f[j][k].y==t3.y && !bk[f[j][abs(k-1)].x][f[j][abs(k-1)].y])
						{
							t3.x=f[j][abs(k-1)].x,t3.y=f[j][abs(k-1)].y;
							break;
						}
				bk[t3.x][t3.y]=true;
				q.push(t3);
			}
		}
	}
	return;
}

int main()
{
	char c;
	n=read(),m=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			cin>>c;
			if(c=='#')
				mp[i][j]=1;
			if(c>='A'&&c<='Z')
				 f[c-'A'+1][tot[c-'A'+1]].x=i,f[c-'A'+1][tot[c-'A'+1]++].y=j,mp[i][j]=2;
			if(c=='=')
				ex=i,ey=j;
			if(c=='@')
				fx=i,fy=j;
		}
	bk[fx][fy]=true;
	bfs();
	return 0;
} 
```cpp
2020/10/15 21:51
加载中...