社区讨论

44pts

P2802回家参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mikdfw7d
此快照首次捕获于
2025/11/29 22:13
3 个月前
此快照最后确认于
2025/12/01 19:30
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define ag a[g.ix + dis[i][0]][g.iy + dis[i][1]]
//#define ll long long
//#define sizee (/*num*/)

using namespace std;

int n,m,a[11][11],bx,by;

bool vis[11][11];

int dis[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};

struct ig{
	int ix;
	int iy;
	int hp;
	int step;
};

queue<ig> q;

void bfs(){
	while(!q.empty()){
		ig g = q.front();
		q.pop();
		if(a[g.ix][g.iy] == 4) g.hp = 6;
		if(a[g.ix][g.iy] == 3){
			cout << g.step << endl;
			return ;
		}
		if(g.hp == 1) break;
		for(int i = 0;i <= 3;++i){
			if(ag != 0){
				q.push(ig{g.ix + dis[i][0],g.iy + dis[i][1],g.hp - 1,g.step + 1});
				vis[g.ix + dis[i][0]][g.iy + dis[i][1]] = true;
			}
		}
	}
	cout << -1 << endl;
	return ;
}

signed main(){
	cin.tie(0)->sync_with_stdio(0);
	//freopen("example.in","r",stdin);
	//freopen("example.out","w",stdout);
	cin >> n >> m;
	for(int i = 1;i <= n;++i){
		for(int j = 1;j <= n;++j){
			cin >> a[i][j];
			if(a[i][j] == 2){
				bx = i,by = j;
			}
		}
	}
	q.push(ig{bx,by,6,0});
	vis[bx][by] = true;
	bfs();
	return 0;
}
/*
  
 */
我只想知道我错哪了,不想要代码,回复记得@我一下,谢谢

回复

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

正在加载回复...