玄学错误,求大佬看过来!!!!!!!!!
  • 板块P2802 回家
  • 楼主段落
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/7/27 16:48
  • 上次更新2023/11/3 07:22:06
查看原帖
玄学错误,求大佬看过来!!!!!!!!!
392327
段落楼主2023/7/27 16:48
#include<bits/stdc++.h>
using namespace std;
int n,m,a[10][10],b[10][10],t;
bool k = 0;
int c_x,c_y,f_x,f_y;
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
queue<int>q;
void bfs(int x,int y){
	q.push(x);
	q.push(y);
	q.push(0);
	while(q.size()){
		x = q.front();
		q.pop();
		y = q.front();
		q.pop();
		t = q.front();
		q.pop();
		if(a[x][y] == 4) b[x][y] = 6;
		if(x == f_x && y == f_y){
			cout << t;
			k = 1;
			return;
		}
		for(int i = 0;i < 4;i ++){
			int xx = x + dx[i];
			int yy = y + dy[i];
			if(x < 1 || x > n || y < 1 || y > m || a[x][y] == 0) continue;
			if(b[x][y] - 1 > b[xx][yy]){
				b[xx][yy] = b[x][y] - 1;
				q.push(xx);
				q.push(yy);
				q.push(t + 1);
			}
		}
	}
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i ++){
		for(int j = 1;j <= m;j ++){
			cin >> a[i][j];
			if(a[i][j] == 3){
				f_x = i;
				f_y = j;
			}
			if(a[i][j] == 2){
				c_x = i;
				c_y = j;
			}
		}
	}
	b[c_x][c_y] = 6;
	bfs(c_x,c_y);
	if(k == 0) cout << -1;
	return 0;
}

这份代码没开O2 WA了第一个点,开了第一个点就AC,k的中间值会变为3(话说k不是bool型的吗,也没有看到k有可能变化为3的地方)

#include<bits/stdc++.h>
using namespace std;
int n,m,a[10][10],b[10][10],t;
char k='N';
int cx,cy,fx,fy;
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
queue<int>q;
void bfs(int x,int y){
	q.push(x);
	q.push(y);
	q.push(0);
	while(q.size()){
		x = q.front();
		q.pop();
		y = q.front();
		q.pop();
		t = q.front();
		q.pop();
		if(a[x][y] == 4) b[x][y] = 6;
		if(x == fx && y == fy){
			cout << t;
			k = 'Y';
			return;
		}
		for(int i = 0;i < 4;i ++){
			int xx = x + dx[i];
			int yy = y + dy[i];
			if(x < 1 || x > n || y < 1 || y > m || a[x][y] == 0) continue;
			if(b[x][y] - 1 > b[xx][yy]){
				b[xx][yy] = b[x][y] - 1;
				q.push(xx);
				q.push(yy);
				q.push(t + 1);
			}
		}
	}
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i ++){
		for(int j = 1;j <= m;j ++){
			cin >> a[i][j];
			if(a[i][j] == 3){
				fx = i;
				fy = j;
			}
			if(a[i][j] == 2){
				cx = i;
				cy = j;
			}
		}
	}
	b[cx][cy] = 6;
	bfs(cx,cy);
	if(k == 'N') cout << -1;
	return 0;
}

第二份代码,就改了k的类型,不用开O2就AC

#include<bits/stdc++.h>
using namespace std;
int n,m,blood[10][10],a[10][10],mn = 1000000000,cnt,t,k;
int c_x,c_y,f_x,f_y;
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
queue<int>q;
void bfs(int x,int y){
	q.push(x);
	q.push(y);
	q.push(0);
	while(q.size()){
		x = q.front();
		q.pop();
		y = q.front();
		q.pop();
		t=q.front();
		q.pop();
		if(a[x][y]==4)blood[x][y]=6;
		if(x==f_x&&y==f_y)
		{
			cout<<t;
			k=1;
			return;
		}
		for(int i = 0;i < 4;i ++){
			int xx = x + dx[i];
			int yy = y + dy[i];
			if(x < 1 || x > n || y < 1 || y > m||a[x][y]==0) continue;
			if(blood[x][y]-1>blood[xx][yy])
			{
				blood[xx][yy]=blood[x][y]-1;
				q.push(xx);
				q.push(yy);
				q.push(t+1);
			}	
		}
	}
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i ++){
		for(int j = 1;j <= m;j ++){
			cin >> a[i][j];
			if(a[i][j] == 3){
				f_x = i;
				f_y = j;
			}
			if(a[i][j] == 2){
				c_x = i;
				c_y = j;
			}
		}
	}
	blood[c_x][c_y]=6;
	bfs(c_x,c_y);
	if(k==0)cout<<-1;
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n,m,a[10][10],b[10][10],mn = 1000000000,t;
int k = 0;
int c_x,c_y,f_x,f_y;
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};
queue<int>q;
void bfs(int x,int y){
	q.push(x);
	q.push(y);
	q.push(0);
	while(q.size()){
		x = q.front();
		q.pop();
		y = q.front();
		q.pop();
		t = q.front();
		q.pop();
		if(a[x][y] == 4) b[x][y] = 6;
		if(x == f_x && y == f_y){
			cout << t;
			k = 1;
			return;
		}
		for(int i = 0;i < 4;i ++){
			int xx = x + dx[i];
			int yy = y + dy[i];
			if(x < 1 || x > n || y < 1 || y > m || a[x][y] == 0) continue;
			if(b[x][y] - 1 > b[xx][yy]){
				b[xx][yy] = b[x][y] - 1;
				q.push(xx);
				q.push(yy);
				q.push(t + 1);
			}
		}
	}
}
int main(){
	cin >> n >> m;
	for(int i = 1;i <= n;i ++){
		for(int j = 1;j <= m;j ++){
			cin >> a[i][j];
			if(a[i][j] == 3){
				f_x = i;
				f_y = j;
			}
			if(a[i][j] == 2){
				c_x = i;
				c_y = j;
			}
		}
	}
	b[c_x][c_y] = 6;
	bfs(c_x,c_y);
	if(k == 0) cout << -1;
	return 0;
}

这两份k都是int类型,第三份WA了第一个点,第四份AC。

2023/7/27 16:48
加载中...