有一个推箱子的游戏, 一开始的情况如下图: 上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。

区块链毕设网qklbishe.com为您提供问题的解答

有一个推箱子的游戏, 一开始的情况如下图:
有一个推箱子的游戏, 一开始的情况如下图:          上图中, '.' 表示可到达的位置, '#' 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格;       ..S0.. -> ...S0.       注意不能将箱子推动到'#'上, 也不能将箱子推出边界;       现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。
上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置, 0表示初始箱子的位置, E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格;

..S0.. -> …S0.

注意不能将箱子推动到’#’上, 也不能将箱子推出边界;

现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成, 则输出-1。

#include<bits/stdc++.h> using namespace std;  const int N=55; char g[N][N]; int n,m; int px,py,bx,by,ex,ey;//记录关键坐标信息 int vis[N][N][N][N]; int dx[4] = {1,0,0,-1}; int dy[4] = {0,1,-1,0};  struct node{ 	int px,py,bx,by; 	int step; };  //判断位置是否合法  bool vaild(int x,int y){ 	if(x<0 || x>=n || y<0 || y>=m || g[x][y] == '#' ) return false; 	return true; }  int bfs(){ 	queue<node> Q;     node now;     now.px = px; now.py = py;     now.bx = bx; now.by = by;     now.step = 0;     vis[now.px][now.py][now.bx][now.by] = 1;     Q.push(now);     while(!Q.empty()){         now = Q.front();         Q.pop();         for(int i=0; i<4; i++){             node next = now;             next.px += dx[i]; 			next.py += dy[i];             next.step++;             if(!vaild(next.px,next.py))continue;                           if(next.px == next.bx && next.py == next.by){                 next.bx += dx[i];next.by += dy[i];                 if(!vaild(next.bx,next.by)) continue;                 if(next.bx == ex && next.by==ey) return next.step;             }             if(!vis[next.px][next.py][next.bx][next.by]){             	vis[next.px][next.py][next.bx][next.by] = 1;             	Q.push(next);             }         }        // cout<<next.step<<" ";     } 	return -1; }  int main(){ 	cin>>n>>m; 	memset(vis, 0, sizeof(vis)); 	for(int i=0;i<n;i++) cin>>g[i]; 	 for(int i=0;i<n;i++){ 	        for(int j=0;j<m;j++){ 	            if(g[i][j]=='S'){ 	                px=i;py=j; 	            } 	            else if(g[i][j]=='E'){ 	                ex=i;ey=j; 	            } 	            else if(g[i][j]=='0'){ 	                bx=i;by=j; 	            } 	        }     } 	cout<<bfs(); } 

14:26

以上就是关于问题有一个推箱子的游戏, 一开始的情况如下图:
上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。的答案

欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。

区块链NFT链游项目方科学家脚本开发培训

承接区块链项目定制开发

微信:btc9767

QQ :1330797917

TELEGRAM: BTCOK9

承接区块链项目定制开发


qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 有一个推箱子的游戏, 一开始的情况如下图: 上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。