86分,两个点WA,求助
查看原帖
86分,两个点WA,求助
1031191
Zhang_Wenfu楼主2024/5/3 19:16
#include <bits/stdc++.h>
using namespace std;
int n,m,dx,dy,xx,yy,sx,sy;
string a[305];
bool vis[305][305],v[305][305],flag=true;
int f[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int c[305][305];
queue<int> q1,q2;

int main(){
	cin >> n >> m;
	for (int i = 0;i < n;i++) cin >> a[i];
	for (int i = 0;i < n;i++){
		for (int j = 0;j < m;j++){
			if (a[i][j] == '@'){sx=i;sy=j;}
			else if (a[i][j] == '#') vis[i][j]=1;
		}
	}
	q1.push(sx);q2.push(sy);c[sx][sy]=0;
	while (!q1.empty()){
		xx=q1.front();yy=q2.front();
		q1.pop();q2.pop();
		for (int i = 0;i < 4;i++){
			dx=xx+f[i][0];dy=yy+f[i][1];
			if (dx >= 0 && dx < n && dy >= 0 && dy < m && !vis[dx][dy]){
				if (a[dx][dy] == '.'){q1.push(dx);q2.push(dy);vis[dx][dy]=1;c[dx][dy]=c[xx][yy]+1;}
				else if ('A' <= a[dx][dy] && a[dx][dy] <= 'Z'){
					if (v[dx][dy]) v[dx][dy]=0;
					else{
						c[dx][dy]=c[xx][yy]+1;
						v[dx][dy]=1;
						flag=true;
						for (int j = 0;j < n;j++){
							for (int k = 0;k < m;k++){
								if (j == dx && k == dy) continue;
								else if (a[j][k] == a[dx][dy]){q1.push(j);q2.push(k);c[j][k]=c[dx][dy];flag=false;break;}
							}if (!flag) break;
						}	
					}
				}
				else if (a[dx][dy] == '='){
					c[dx][dy]=c[xx][yy]+1;
					cout << c[dx][dy];
					return 0;
				}
			}
		}
	}
	return 0;
}
2024/5/3 19:16
加载中...