80 求助
  • 板块P1141 01迷宫
  • 楼主like_1999
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/18 17:46
  • 上次更新2024/8/18 20:37:31
查看原帖
80 求助
1245542
like_1999楼主2024/8/18 17:46
# include<bits/stdc++.h>
using namespace std;
int n , m , start_x , start_y , totel_last , totel_1 , totel[10001] , maze_flag[10001][10001];
int dir[4][2] = {{1 , 0} , {0 , 1} , {-1 , 0} , {0 , -1}};
char maze[10001][10001];
struct Node {
	int data_x;
	int data_y;
};
queue<Node>que;
void BFS (int x_1 , int y_1) {
	totel_1++;
	Node start_Node;
	start_Node.data_x = x_1;
	start_Node.data_y = y_1;
	totel_last = 1;
	maze_flag[x_1][y_1] = totel_1;
	que.push(start_Node);
	while (!que.empty()) {
		for (int w = 0 ; w < 4 ; w++) {
			long int x = que.front().data_x + dir[w][0];
			long int y = que.front().data_y + dir[w][1];
			if (maze[x][y] != maze[que.front().data_x][que.front().data_y] && maze_flag[x][y] == 0 && x >= 1 && x <= n && y >= 1 && y <= n) {
				maze_flag[x][y] = totel_1;
				Node New_Node;
				New_Node.data_x = x;
				New_Node.data_y = y;
				totel_last++;
				que.push(New_Node);
			}
		}
		que.pop();
	}
	totel[totel_1] = totel_last;
}
int main() {
 	cin >> n >> m;
 	for (int x = 1 ; x <= n ; x++) {
 		for (int y = 1 ; y <= n ; y++) {
 			cin >> maze[x][y];
		}
	}
	for (int x = 1 ; x <= n ; x++) {
 		for (int y = 1 ; y <= n ; y++) {
 			if (maze_flag[x][y] == 0) {
 				BFS(x , y);
 			}
		}
	}
	for (int q = 1 ; q <= m ; q++) {
		cin >> start_x >> start_y;	
		cout << totel[maze_flag[start_x][start_y]] << endl;
	}
    return 0;
}

2024/8/18 17:46
加载中...