哪里挂了?
查看原帖
哪里挂了?
866613
sansesantongshun楼主2023/12/3 13:54

双向广搜,#5 WA\color{#e73c4c}WA,哪里挂了?

#include<bits/stdc++.h>
using namespace std;
int n,m,b[2][505][505],sx,sy,ex,ey,x,y,xx,yy,dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
bool k,ok;
deque<pair<int,int> > d[2];
char a[505][505];
int main()
{
	cin>>n>>m;
	while (n || m)
	{
		memset(b,-1,sizeof(b));
		for (int i=0;i<n;++i)
		for (int j=0;j<m;++j)
		cin>>a[i][j];
		scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
		if (sx==ex && sy==ey)
		{
			cout<<"0\n";
			continue;
		}
		b[0][sx][sy]=0;
		d[0].push_back(make_pair(sx,sy));
		b[1][ex][ey]=0;
		d[1].push_back(make_pair(ex,ey));
		while (!d[0].empty() && !d[1].empty())
		{
			if (d[0].size()<=d[1].size())
			k=0;
			else
			k=1;
			x=d[k].front().first;
			y=d[k].front().second;
			d[k].pop_front();
			ok=0;
			for (int i=0;i<4;++i)
			{
				xx=x+dx[i];
				yy=y+dy[i];
				if (0<=xx && xx<n && 0<=yy && yy<m && b[k][xx][yy]==-1)
				{
					if (a[xx][yy]==a[x][y])
					{
						b[k][xx][yy]=b[k][x][y];
						d[k].push_front(make_pair(xx,yy));
					}
					else
					{
						b[k][xx][yy]=b[k][x][y]+1;
						d[k].push_back(make_pair(xx,yy));
					}
					if (b[1-k][xx][yy]!=-1)
					{
						cout<<b[k][xx][yy]+b[1-k][xx][yy]<<'\n';
						ok=1;
						break;
					}
				}
			}
			if (ok)
			break;
		}
		d[0].clear();
		d[1].clear();
		scanf("%d%d",&n,&m);
	}
}
2023/12/3 13:54
加载中...