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

这是qklbishe.com第5743 篇笔试面试资料
提供答案分析,通过本文《有一个推箱子的游戏, 一开始的情况如下图:
上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

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

..S0.. -> …S0.

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

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

有一个推箱子的游戏, 一开始的情况如下图:          上图中, '.' 表示可到达的位置, '#' 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格;       ..S0.. -> ...S0.       注意不能将箱子推动到'#'上, 也不能将箱子推出边界;       现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。 answ0r
import java.util.*; public class Main { static char[][] map=new char[110][110]; static int next[][]={{1,0},{-1,0},{0,1},{0,-1}}; static int m,n; static int [][][][] visit = new int[60][60][60][60]; public static void main(String[] args) {          Scanner sc = new Scanner(System.in);          n=sc.nextInt();         m=sc.nextInt();         sc.nextLine(); for(int i=0;i<n;i++) {             map[i] = sc.nextLine().toCharArray();         } int r1=0,r2=0,b1=0,b2=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(map[i][j]=='S') {                     r1 = i;                     r2 = j;                 } if(map[i][j]=='0'){                     b1=i;                     b2=j;                 }             }         }         System.out.println(bfs(r1,r2,b1,b2));     } static int bfs(int r1,int r2,int b1,int b2){         LinkedList<Node> queue=new LinkedList<>();         queue.offer(new Node(r1,r2,b1,b2));         visit[r1][r2][b1][b2]=1; while(queue.size()>0){             Node t= queue.poll(); if(map[t.bx][t.by]=='E'){ return visit[t.x][t.y][t.bx][t.by]-1;             } for(int k=0;k<4;k++){ int mx=t.x+next[k][0]; int my=t.y+next[k][1]; //System.out.println(mx+" ---- "+my); if(mx<0||mx>=n||my<0||my>=m||map[mx][my]=='#')continue; if(mx==t.bx&&my==t.by){ int mbx=t.bx+next[k][0]; int mby=t.by+next[k][1]; if(mbx>=n||mbx<0||mby<0||mby>=m ||map[mbx][mby]=='#'||visit[mx][my][mbx][mby]!=0)continue;                     visit[mx][my][mbx][mby]= visit[t.x][t.y][t.bx][t.by]+1;                     queue.offer(new Node(mx,my,mbx,mby));                 }else{ if(visit[mx][my][t.bx][t.by]!=0)continue;                     visit[mx][my][t.bx][t.by] = visit[t.x][t.y][t.bx][t.by]+1;                     queue.offer(new Node(mx,my,t.bx,t.by));                 }             }         } return -1;     } public static class Node { int x, y, bx, by; public Node(int x, int y, int bx, int by) { this.x = x; this.y = y; this.bx = bx; this.by = by;         }     } }

2021-01-10 22:30:15 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » 有一个推箱子的游戏, 一开始的情况如下图: 上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置 , 0表示初始箱子的位置 , E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格; ..S0.. -> …S0. 注意不能将箱子推动到’#’上, 也不能将箱子推出边界; 现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成 , 则输出-1。-笔试面试资料

提供最优质的资源集合

立即查看 了解详情