有一个推箱子的游戏, 一开始的情况如下图: 上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。
区块链毕设网qklbishe.com为您提供问题的解答
有一个推箱子的游戏, 一开始的情况如下图:
上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 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链游项目方科学家脚本开发培训
从业7年-专注一级市场
微信:btc9767
TELEGRAM :https://t.me/btcok9
具体资料介绍
web3的一级市场千万收益的逻辑
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 有一个推箱子的游戏, 一开始的情况如下图:
上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。
微信:btc9767
TELEGRAM :https://t.me/btcok9
具体资料介绍
web3的一级市场千万收益的逻辑
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 有一个推箱子的游戏, 一开始的情况如下图:
上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 有一个推箱子的游戏, 一开始的情况如下图:
上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 有一个推箱子的游戏, 一开始的情况如下图: 上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。