社区讨论

数据过水

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 条回复,欢迎继续交流。

正在加载回复...