谁能帮我看一下哪错了
查看原帖
谁能帮我看一下哪错了
1144431
ZhengDanSAMA楼主2024/12/7 16:14
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define WA return 0;
const int N=1e5+2;
const int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
int n,m,a,b;
bool d[1000][1000];
char s[1000][1000];
//set<>
//stack<>
//vector<>
struct Object{
    int x,y;
}st,ed;
queue<Object> q;
map<char,Object> mp;
signed main()
{
    ios::sync_with_stdio(false);
    //freopen("climb.in","r",stdin);
    //freopen("climb.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
	    for(int j=1;j<=m;j++){
	        cin>>s[i][j];
	        if(s[i][j]=='@')st.x=i,st.y=j;
	        if(s[i][j]=='=')ed.x=i,ed.y=j;
	    }    
	}
	for(int i=1;i<=n;i++){
	    for(int j=1;j<=m;j++){
	        if(s[i][j]>='A'&&s[i][j]<='Z'){
	            int wc,nm;
	            int am=mp[s[i][j]].x,ns=mp[s[i][j]].y;
	            if(!am==0&&!ns==0){
	                ed.x+ed.y-am-ns<0?wc=-ed.x-ed.y+am+ns:wc=ed.x+ed.y-am-ns;
	                ed.x+ed.y-i-j<0?nm=-ed.x-ed.y+i+j:nm=ed.x+ed.y-i-j;
	                if(wc>nm)mp[s[i][j]].x=i,mp[s[i][j]].y=j;
	            }else mp[s[i][j]].x=i,mp[s[i][j]].y=j;
	        }
	    }    
	}
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)d[i][j]=-1;
	while(q.size())q.pop();
	q.push(st);
	while(q.size()){
	    Object now=q.front();q.pop();
	    if(s[now.x][now.y]>='A'&&s[now.x][now.y]<='Z')now=mp[s[now.x][now.y]];
	    for(int i=0;i<4;i++){
	        Object next;
	        next.x=now.x+dx[i];
	        next.y=now.y+dy[i];
	        if(next.x>=1&&next.y>=1&&next.x<=n&&next.y<=m&&s[next.x][next.y]!='#')continue;
	        if(d[next.x][next.y]==-1){
	            d[next.x][next.y]=d[now.x][now.y]+1;
	            q.push(next);
	        }
	    }
	}
	cout<<d[ed.x][ed.y];
	WA;
}
2024/12/7 16:14
加载中...