用二进制表示获得的钥匙,假设n=钥匙个数
000000000代表没有钥匙,0000000001代表有idx为1的钥匙,0000000011代表有idx=1,2的钥匙
(这方法巧妙又复杂..
代码:
- class Solution {
- static int[][] dirs = {{-1,0},{1,0},{0,-1},{0,1}};
- public int shortestPathAllKeys(String[] grid) {
- int m = grid.length, n = grid[0].length();
- int startx = 0,starty = 0;
- Map
keyToIndex = new HashMap<>(); - //存钥匙的字母和对应的idx序号
- for(int i=0;i
- for(int j=0;j
- if(grid[i].charAt(j)=='@'){
- startx = i;
- starty = j;
- }else if(Character.isLowerCase(grid[i].charAt(j))){
- if(!keyToIndex.containsKey(grid[i].charAt(j))){
- int idx = keyToIndex.size();
- keyToIndex.put(grid[i].charAt(j), idx);
- }
- }
- }
- }
- Queue<int[]> queue = new ArrayDeque<int[]>();
- int[][][] dist = new int[m][n][1<
- //第三维是2的size次方 列举钥匙的所有可能
- for(int i=0;i
- for(int j=0;j
- Arrays.fill(dist[i][j],-1);
- }
- }
- queue.offer(new int[]{startx,starty,0});
- dist[startx][starty][0] = 0;
- while(!queue.isEmpty()){
- int[] arr = queue.poll();
- int x = arr[0],y = arr[1],mask = arr[2];//mask是钥匙的排列
- for(int i=0;i<4;i++){
- int nx = x + dirs[i][0];
- int ny = y + dirs[i][1];
- if(nx>=0 && nx
=0 && ny'#'){ - if(grid[nx].charAt(ny)=='.'||grid[nx].charAt(ny)=='@'){
- if(dist[nx][ny][mask] == -1){
- dist[nx][ny][mask] = dist[x][y][mask]+1;
- queue.offer(new int[]{nx,ny,mask});
- }
- }else if(Character.isLowerCase(grid[nx].charAt(ny))){
- int idx = keyToIndex.get(grid[nx].charAt(ny));
- if(dist[nx][ny][mask|(1<
1){ - dist[nx][ny][mask|(1<
1; - if((mask|(1<
1<1){ - return dist[nx][ny][mask|(1<
- }
- queue.offer(new int[]{nx,ny,mask|(1<
- }
- }else{
- int idx = keyToIndex.get(Character.toLowerCase(grid[nx].charAt(ny)));
- if((mask&(1<
0&&dist[nx][ny][mask]==-1){ - dist[nx][ny][mask] = dist[x][y][mask]+1;
- queue.offer(new int[]{nx,ny,mask});
- }
- }
- }
- }
-
- }
- return -1;
- }
- }
-
相关阅读:
【无标题】光伏逆变器的IEC62109测试,逆变器IEC62109测试项目
常用的数字格式代码
java-net-php-python-springboot社区志愿者管理系统计算机毕业设计程序
39、Docker(镜像命令)
基于Python的Linear classification实验报告
生信学院|10月13日《SOLIDWORKS参数化应用——DriveWorksXpress》
Linux 查看程序(动态库)、进程的依赖库的方法
3D模型格式转换工具HOOPS Exchange:模型数据自由导入和导出
Tensor Core的WMMA API编程入门
案例精选|聚铭网络多产品联合部署为北京迎祥酒店建立信息安全屏障
-
原文地址:https://blog.csdn.net/stacey777/article/details/133085166