90分求调

P1443 马的遍历

AC代码: ```cpp #include<bits/stdc++.h> using namespace std; const int N=1005; const int dx[]={-1,-2,-2,-1,1,2,2,1}; const int dy[]={-2,-1,1,2,2,1,-1,-2}; #define Len 8 bool vis[N][N]; int dis[N][N]; int n,m,sx,sy; struct node { int x,y; }; void bfs(int a,int b) { queue<node> q; int nx,ny; node cur; dis[a][b]=0; vis[a][b]=true; q.push((node){a,b}); while(!q.empty()) { cur=q.front(); q.pop(); for(int i=0;i<Len;i++) { nx=dx[i]+cur.x; ny=dy[i]+cur.y; if(nx<1||nx>n||ny<1||ny>m) continue; if(vis[nx][ny]) continue; dis[nx][ny]=dis[cur.x][cur.y]+1; vis[nx][ny]=true; q.push((node){nx,ny}); } } return; } int main() { memset(dis,-1,sizeof(dis)); cin>>n>>m>>sx>>sy; bfs(sx,sy); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(dis[i][j]==0&&i!=sx&&j!=sy) { if(j==m) { cout<<-1; } else cout<<-1<<" "; } else { if(j==m) { cout<<dis[i][j]; } else { cout<<dis[i][j]<<" "; } } } cout<<endl; } return 0; } ```
by hzy_Q @ 2024-01-23 10:08:48


|