为何MLE,玄关

P1443 马的遍历

@[leiwusi](/user/525038) 已经遍历过的点不应该再遍历,否则会在两个点之间反复遍历。
by 幻想繁星 @ 2024-03-03 12:40:04


@[leiwusi](/user/525038) 不知道,我用的pair就过了,你看看? ``` #include<bits/stdc++.h> using namespace std; int d1[8] = {2,1,2,1,-2,-1,-2,-1}; int d2[8] = {1,2,-1,-2,-1,2,1,-2}; int g[500][500]; typedef pair<int,int> node; int main(){ int n,m,x,y; cin>>n>>m>>x>>y; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) g[i][j]=-1; g[x][y]=0; node t; t.first=x;t.second=y; queue<node>q; q.push(t); while(!q.empty()){ t=q.front(); q.pop(); for(int i=0;i<8;i++){ int dx=t.first,dy=t.second; if(dx+d1[i]<=n&&dx+d1[i]>=1&&dy+d2[i]<=m&&dy+d2[i]>=1&&g[dx+d1[i]][dy+d2[i]]==-1){ g[dx+d1[i]][dy+d2[i]]=g[dx][dy]+1; q.push({dx+d1[i],dy+d2[i]}); } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) cout<<g[i][j]<<" "; cout<<endl; } return 0; } ```
by LikeMiracle @ 2024-03-05 00:08:09


|