过不了#9!!!

P1443 马的遍历

```cpp if(a[x][y]==-1&&x>=1&&x<=n&&y>=1&&y<=m) ``` 改成 ```cpp if(x>=1&&x<=n&&y>=1&&y<=m&&a[x][y]==-1) ``` 试试?
by Sya_Resory @ 2020-08-09 20:29:26


@[Sky_Dreamer](/user/114082) 一样(~~其实我觉得没什么区别~~)
by rpdg @ 2020-08-09 20:31:22


```cpp #include<bits/stdc++.h> using namespace std; int a[505][505]; int d[8][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}}; int h[200010][2]; int n,m,s,t; void bfs(int p,int q) { int t=0,w=1; h[1][0]=p; h[1][1]=q; a[p][q]=0; while(t<w) { t++; for(int i=0;i<8;i++) { int x,y; x=h[t][0]+d[i][0]; y=h[t][1]+d[i][1]; if(a[x][y]==-1&&x>=1&&x<=n&&y>=1&&y<=m) { w++; h[w][0]=x; h[w][1]=y; a[x][y]=a[h[t][0]][h[t][1]]+1; } } } } int main() { memset(a,-1,sizeof(a)); cin>>n>>m>>s>>t; bfs(s,t); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cout<<left<<setw(5)<<a[i][j]; } cout<<endl; } return 0; } ``` 数组开大点过了
by lew2018 @ 2020-08-09 22:41:01


|