社区讨论
数据过水
P1443马的遍历参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mchfkarp
- 此快照首次捕获于
- 2025/06/29 16:51 8 个月前
- 此快照最后确认于
- 2025/06/29 16:51 8 个月前
错误代码(90pts)
CPP#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
queue<int> x_,y_,z_;
bool vis[405][405];
int n,m,x,y,a[405][405],p[9][2]={{0,0},{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
void bfs(int X,int Y,int ans){
// cout<<X<<' '<<Y<<' '<<ans<<endl;
x_.pop();y_.pop();z_.pop();
for(int i=1;i<=8;i++){
// cout<<X+p[i][0]<<' '<<Y+p[i][1]<<endl;
if(X+p[i][0]<=n && X+p[i][0]>=1 && Y+p[i][1]<=m && Y+p[i][1]>=1 && !vis[X+p[i][0]][Y+p[i][1]]){
x_.push(X+p[i][0]),y_.push(Y+p[i][1]),z_.push(ans+1);
vis[x_.back()][y_.back()]=1;
a[x_.back()][y_.back()]=ans+1;
}
}
if(x_.empty()) return ;
// ll xx=x_.front(),yy=y_.front();
bfs(x_.front(),y_.front(),z_.front());
}
int main(){
scanf("%d %d %d %d",&n,&m,&x,&y);
x_.push(x),y_.push(y),z_.push(0);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=-1;
vis[x][y]=1;
a[x][y]=0;
bfs(x,y,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-15d ",a[i][j]);
}
printf("\n");
}
return 0;
}
正解(AC)
CPP#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
queue<int> x_,y_,z_;
bool vis[405][405];
int n,m,x,y,a[405][405],p[9][2]={{0,0},{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};
void bfs(int X,int Y,int ans){
// cout<<X<<' '<<Y<<' '<<ans<<endl;
x_.pop();y_.pop();z_.pop();
for(int i=1;i<=8;i++){
// cout<<X+p[i][0]<<' '<<Y+p[i][1]<<endl;
if(X+p[i][0]<=n && X+p[i][0]>=1 && Y+p[i][1]<=m && Y+p[i][1]>=1 && !vis[X+p[i][0]][Y+p[i][1]]){
x_.push(X+p[i][0]),y_.push(Y+p[i][1]),z_.push(ans+1);
vis[x_.back()][y_.back()]=1;
a[x_.back()][y_.back()]=ans+1;
}
}
if(x_.empty()) return ;
// ll xx=x_.front(),yy=y_.front();
bfs(x_.front(),y_.front(),z_.front());
}
int main(){
scanf("%d %d %d %d",&n,&m,&x,&y);
x_.push(x),y_.push(y),z_.push(0);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
a[i][j]=-1;
vis[x][y]=1;
a[x][y]=0;
bfs(x,y,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%-15d ",a[i][j]);
}
printf("\n");
}
return 0;
}
看来除了#10外n都等于m
回复
共 0 条回复,欢迎继续交流。
正在加载回复...