社区讨论
求助!
P1443马的遍历参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi7ynff3
- 此快照首次捕获于
- 2025/11/21 05:45 4 个月前
- 此快照最后确认于
- 2025/11/21 05:45 4 个月前
每次输入199 199 100 100时都会没有输出(但是运行了),而且评测机显示的是wa而不是tle,求大佬指点。
CPP// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int ans[1001][1001];
int ax[1001][1001],n,m;
int dx[8]= {2,-2,2,-2,-1,1,-1,1};
int dy[8]= {1,1,-1,-1,2,2,-2,-2};
int head,tail,x,y;
struct px {
int x;
int y;
int step;
} a[10001];
void bfs(int stax,int stay) {
head=0;
tail=1;
a[1].x=stax;
a[1].y=stay;
a[1].step=1;
while(head<=tail) {
++head;
x=a[head].x;
y=a[head].y;
for(int i=0; i<8; i++) {
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m) {
if(ax[nx][ny]==0) {
ax[nx][ny]=1;
++tail;
a[tail].x=nx;
a[tail].y=ny;
a[tail].step=a[head].step+1;
ans[nx][ny]=a[tail].step-1;
}
}
}
}
}
int main() {
int a1,b1,l=-1,l1=0;
cin>>n>>m>>a1>>b1;
bfs(a1,b1);
for(int i=1; i<=n; i++) {
for(int j=1; j<=m; j++) {
if(i==a1&&j==b1)
printf("%-5d",l1);
else if(((n==1||m==1)||(n==2||m==2))&&((i==a1+1&&j==b1)||(i==a1-1&&j==b1)||(i==a1&&j==b1+1)||(i==a1&&j==b1-1)))
printf("%-5d",l);
else if(ans[i][j]==0)
printf("%-5d",l);
else
printf("%-5d",ans[i][j]);
}
cout<<endl;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...