萌新刚学OI 求助水题
  • 板块P2802 回家
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/10/7 17:03
  • 上次更新2023/11/4 04:25:05
查看原帖
萌新刚学OI 求助水题
133151
封禁用户楼主2021/10/7 17:03

rt rt

代码:

#include<bits/stdc++.h>
using namespace std;
int xx[]={0,0,-1,1};
int yy[]={1,-1,0,0};
int n,m;
int mp[15][15];
int sx,sy;
int ex,ey;
struct Node{
	int x;
	int y;
	int e;
	int s;
};
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			cin>>mp[i][j];
			if(mp[i][j]==2){
				sx=i;
				sy=j;
			}
			if(mp[i][j]==3) {
				ex=i;
				ey=j;
			}
		}
	}
	queue<Node> Q;
	Q.push((Node){sx,sy,6,0});
	while(!Q.empty()){
		if(Q.front().x==ex and Q.front().y==ey){
			cout<<Q.front().s<<endl;
			return 0;
		}
		for(int i=0;i<4;++i){
			int dx=Q.front().x+xx[i];
			int dy=Q.front().y+yy[i];
			if(dx>0 and dx<=n and dy>0 and dy<=m and mp[dx][dy]!=0){
				Q.push((Node){dx,dy,Q.front().e-1,Q.front().s+1});
				if(Q.front().e==0) {
					Q.pop();
				}
				if(mp[dx][dy]==4) Q.front().e=6;
			}
		}
		Q.pop();
	}
	puts("-1");
	return 0;
}

第一个数据点:

9 9 2 0 1 4 1 1 4 1 1 1 0 4 1 1 4 1 1 1 1 4 1 1 4 1 1 1 4 4 1 1 4 1 4 1 4 1 1 1 4 1 1 1 4 1 1 1 4 1 1 1 4 1 1 1 4 1 4 1 4 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 4 1 1 1 1 1 3

-1

2021/10/7 17:03
加载中...