蒟蒻错了一个点,求助qwq!!!
查看原帖
蒟蒻错了一个点,求助qwq!!!
221610
Berlin_Jacor楼主2020/6/16 19:30

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

int n, m, dx[] = {0, -1, 1, 0}, dy[] = {1, 0, 0, -1};
char a[305][305];
int dis[305][305];
int visx[305], visy[305], px[305][305], py[305][305];
bool v[100], vis[305][305];//传送回来的时候和dis不一样,不能两个都标记啊,阿sir
queue<pair<int,int> >q;

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL),cout.tie(NULL);
	freopen("P1825_6.in","r",stdin);
	freopen("P1825.out","w",stdout);
	cin>>n>>m;
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= m; ++j)
		{
			cin>>a[i][j];
			if(a[i][j] == '=')
			{
				q.push(make_pair(i,j));
				vis[i][j] = 1;
			}
			if(a[i][j] >= 'A' && a[i][j] <= 'Z')
				if(v[a[i][j] - 'A'])
				{
					px[i][j] = visx[a[i][j] - 'A'],
					py[i][j] = visy[a[i][j] - 'A'],
					px[visx[a[i][j] - 'A']][visy[a[i][j] - 'A']] = i,
					py[visx[a[i][j] - 'A']][visy[a[i][j] - 'A']] = j;
				}
				else v[a[i][j] - 'A'] = 1, visx[a[i][j] - 'A'] = i, visy[a[i][j] - 'A'] = j;
		}

		while(q.size())
		{
			for(int i = 0; i < 4; ++i)
			{
				int x=q.front().first + dx[i],
            y=q.front().second + dy[i];
        if(vis[x][y])continue;
        vis[x][y] = 1;
        if(a[x][y] == '#')continue;
        if(x < 1 || y < 1 || x > n || y > m)continue;
        dis[x][y] = dis[q.front().first][q.front().second] + 1;
        if(a[x][y] == '@'){cout<<dis[x][y];return 0;}
        if(a[x][y] == '.'){q.push(make_pair(x, y));}
        else
        {
        	dis[px[x][y]][py[x][y]] = dis[x][y];
        	q.push(make_pair(px[x][y], py[x][y]));
        }
			}
			q.pop();
		}
}
2020/6/16 19:30
加载中...