有没有大佬看一下这个代码有什么问题
  • 板块P1141 01迷宫
  • 楼主SpecialT
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/9/30 15:18
  • 上次更新2023/11/2 16:58:32
查看原帖
有没有大佬看一下这个代码有什么问题
421567
SpecialT楼主2023/9/30 15:18

线下编译、运行都没有出错。可是提交到洛谷后就RE了 报错信息:Runtime Error. Received signal 11: Segmentation fault with invalid memory reference. 代码:

#include<bits/stdc++.h>
using namespace std;
bool ma[1010][1010];int n,m;//ma是存地图的
int blo[1010][1010];//代表每个坐标的答案
bool used[1010][1010],sused[1010][1010];//used代表是否被bfs遍历,sused是标志这次遍历到的点,结束后就会变成0
int sum;
struct poi{
	int x,y;
};
queue<poi> b;
void bfscore(){
	while(!b.empty()){
		poi pn = b.front();b.pop();
		if(!used[pn.x+1][pn.y] and pn.x+1<=n and ma[pn.x+1][pn.y]^ma[pn.x][pn.y]){
			pn.x++;
			used[pn.x][pn.y] = sused[pn.x][pn.y] = 1;
			b.push(pn);sum++;
			pn.x--;
		}
		if(!used[pn.x-1][pn.y] and pn.x-1>0 and ma[pn.x-1][pn.y]^ma[pn.x][pn.y]){
			pn.x--;
			used[pn.x][pn.y] = sused[pn.x][pn.y] = 1;
			b.push(pn);sum++;
			pn.x++;
		}
		if(!used[pn.x][pn.y+1] and pn.y+1<=n and ma[pn.x][pn.y+1]^ma[pn.x][pn.y]){
			pn.y++;
			used[pn.x][pn.y] = sused[pn.x][pn.y] = 1;
			b.push(pn);sum++;
			pn.y--;
		}
		if(!used[pn.x][pn.y-1] and pn.y-1>0 and ma[pn.x][pn.y-1]^ma[pn.x][pn.y]){
			pn.y--;
			used[pn.x][pn.y] = sused[pn.x][pn.y] = 1;
			b.push(pn);sum++;
			pn.y++;
		}
	}
}
int bfs(int plax,int play){
	sum = 1;
	poi starta;starta.x = plax,starta.y = play;
	b.push(starta);
	used[plax][play] = sused[plax][play] = 1;
	bfscore();
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)
		if(sused[i][j]){
			sused[i][j] = 0;
			blo[i][j] = sum;
		}
}

int main(){
	cin>>n>>m;
	char ina;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			ina = getchar();
			if(ina != '0' and ina != '1'){
				j--;
			}
			else ma[i][j] = ina-'0';
		}
	}
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(!used[i][j])bfs(i,j);
	int inx,iny;
	for(int i=1;i<=m;i++){
		scanf("%d%d",&inx,&iny);
		printf("%d\n",blo[inx][iny]);
	}
	return 0;
}
2023/9/30 15:18
加载中...