社区讨论

5分求条

P12684 【MX-J15-T4】叉叉学习魔法参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhj1zynh
此快照首次捕获于
2025/11/03 19:25
4 个月前
此快照最后确认于
2025/11/03 19:25
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
int dis1[4][2]={0,1,1,0,0,-1,-1,0},dis2[4][2]={1,-1,-1,1,-1,-1,1,1};
int n,m;
bool vis[5003][5004];
char a[5003][5004];
struct node{
	int x,y,mofa,step;
};
deque<node>q;
vector<node>s,s1;
void bfs(int sx,int sy){
	q.push_back({sx,sy,0,0});
	while(!q.empty()){
		node t=q.front();
		while(!q.empty()&&t.mofa==q.front().mofa&&t.step==q.front().step){
			t=q.front();
			q.pop_front();
			for(int i=0;i<4;i++){
				int x=t.x+dis1[i][0];
				int y=t.y+dis1[i][1];
				if(x<=0||y<=0||x>n||y>m||a[x][y]=='#'||vis[x][y]==1){
					continue;
				}
				if(a[x][y]=='W'){
					cout<<t.step+1<<" "<<t.mofa<<endl;
			//		for(int i=1;i<=n;i++){
			//			for(int j=1;j<=m;j++){
			//				cout<<vis[i][j];
		//				}
		//				cout<<endl;
		//			}
					//exit(1);
				}
				vis[x][y]=1;
				s1.push_back({x,y,t.mofa,t.step+1});
			}
			for(int i=0;i<4;i++){
				int x=t.x+dis2[i][0];
				int y=t.y+dis2[i][1];
				if(x<=0||y<=0||x>n||y>m||a[x][y]=='#'||vis[x][y]==1){
					continue;
				}
				if(a[x][y]=='W'){
					cout<<t.step<<" "<<t.mofa+1<<endl;
				//	for(int i=1;i<=n;i++){
				//		for(int j=1;j<=m;j++){
				//			cout<<vis[i][j];
					//	}
					//	cout<<endl;
					//}
					//exit(1);
				}
				vis[x][y]=1;
				s.push_back({x,y,t.mofa+1,t.step});
			}

		}
		if(s.size()!=0){
			for(int i=0;i<=s.size()-1;i++){
				q.push_front(s[i]);
			}
		}
		if(s1.size()!=0){
			for(int i=0;i<=s1.size()-1;i++){
				q.push_back(s1[i]);
			}
		}
		s.clear();
		s1.clear();
	}
}
int main(){
    ios::sync_with_stdio(0), cin.tie(0);
	cin>>n>>m;
	int sx,sy;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			if(a[i][j]=='X'){
				sx=i;
				sy=j;
			}
		}
	}
	vis[sx][sy]=1;
	bfs(sx,sy);
	cout<<-1<<" "<<-1;
	return 0;
}
RE 19个点 AC 1个点
有没有大佬帮忙看一下蒟蒻的代码

回复

0 条回复,欢迎继续交流。

正在加载回复...