社区讨论

五彩斑斓求条

P1825[USACO11OPEN] Corn Maze S参与者 2已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mhjshz7m
此快照首次捕获于
2025/11/04 07:47
4 个月前
此快照最后确认于
2025/11/04 07:47
4 个月前
查看原帖
CPP
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<cstdlib>
using namespace std;
#define PI 3.141593
#define maxm 1100
#define MAXEDGE 100000
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define nxp next_permutation
#define prq priority_queue
#define cfor(i,a,b) for(int i=(a);i<(b);i++)


struct point{
	pair<int,int>wz;
	int bs;
};
char a[300][300];
int n,m;
pair<int,int> another(pair<int,int>b){
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(a[i][j]==a[b.first][b.second]){
				if(i!=b.first&&j!=b.second){
					return make_pair(i,j);
				}
			}
		}
	}
}
int main() {
	//int cnt=0;
	
	cin>>n>>m;
	
	
	pair<int,int>st,en;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>a[i][j];
			if(a[i][j]=='@'){
				st.first=i;
				st.second=j;
			}
			if(a[i][j]=='='){
				en.first=i;
				en.second=j;
			}
			
			
		}
	}
	queue<point>q;
	bool vis[300][300];
	memset(vis,0,sizeof(vis));
	vis[st.first][st.second]=1;
	q.push(point({st,0}));
	const int dx[]={1,-1,0,0};
	const int dy[]={0,0,-1,1};
	while(!q.empty()){
		point now=q.front();
		q.pop();
		for(int i=0;i<4;i++){
			int x=now.wz.first+dx[i],y=now.wz.second+dy[i];
			if(x>=0&&x<n&&y>=0&&y<=m&&a[x][y]!='#'&&vis[x][y]==0){
				vis[x][y]==1;
				int xybs=now.bs+1;
				if(a[x][y]=='='){
					cout<<xybs;
					return 0;
					
				}
				if(a[x][y]>='A'&&a[x][y]<='Z'){
					pair<int,int>tmp=make_pair(x,y);
					pair<int,int>tmp2=another(tmp);
					x=tmp2.first,y=tmp2.second;
				}
				q.push(point{make_pair(x,y),xybs});
				
			}
			
		}
	}
	return 0;
}

回复

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

正在加载回复...