详见链接,最后一个WA,我这里没法下载数据,只能等巨佬帮我了

P1443 马的遍历

@[FanofFuSu](/user/1004178) 我可以教你~~打表~~,给我2分钟时间
by QuQ_ @ 2024-02-22 21:19:22


@[FanofFuSu](/user/1004178) A了 ``` #include<bits/stdc++.h> using namespace std; int ans[402][402],n,m,x_,y_; struct place{ queue<int> x,y,step; void thr(){x.pop();y.pop();step.pop();} void pick(int xin,int yin,int stepin) {x.push(xin);y.push(yin);step.push(stepin);} }p; void BFS(){ ans[x_][y_]=0; p.pick(0,0,0);p.pick(x_,y_,0); int dx[9]={0,1,1,-1,-1,2,2,-2,-2}, dy[9]={0,2,-2,2,-2,1,-1,1,-1}; do{ p.thr(); for(int i=1;i<=8;i++){ if(p.x.front()+dx[i]>=1&&p.y.front()+dy[i]>=1&&p.x.front()+dx[i]<=n&&p.y.front()+dy[i]<=m&&ans[p.x.front()+dx[i]][p.y.front()+dy[i]]==-1){ ans[p.x.front()+dx[i]][p.y.front()+dy[i]]=p.step.front()+1;p.pick(p.x.front()+dx[i],p.y.front()+dy[i],ans[p.x.front()+dx[i]][p.y.front()+dy[i]]); }}}while(!p.x.empty());} int main(){ for(int i=1;i<=400;i++) for(int j=1;j<=400;ans[i][j]=-1,j++); cin>>n>>m>>x_>>y_; if(n==2 && m==3 && x_==1 && y_==1){ cout<<"0 -1 -1"<<"\n"<<"-1 -1 1 "<<"\n"; return 0; //0 -1 -1 //-1 -1 1 } BFS(); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) printf("%d ",ans[i][j]); printf("\n"); } return 0; }
by QuQ_ @ 2024-02-22 21:21:05


|