81 使用DFS和BFS解机器人的运动范围

问题描述:地上有一个m行n列的方格,从坐标[0,0]到坐标[m-1,n-1].一个机器人从坐标[0,0]的格子开始移动,他每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。

public int numBit(int n)
{
int num=0;
while(n/10!=0)
{
num+=n%10;
n=n/10;
}
num+=n;
return num;
}
int count=0;

public void dfs(int [][]matrix,int i,int j,int k,int [][]visited)
{
if(i<0||i>=matrix.length||j<0||j>=matrix[0].length){return;}
if(visited[i][j]){return;}
if(numBit(matrix[i][j])>k){return;}
visited[i][j]=true;
count+=1;
dfs(matrix,i+1,j,k,visited);
dfs(matrix,i-1,j,k,visited);
dfs(matrix,i,j+1,k,visited);
dfs(matrix,i,j-1,k,visited);
}
public int Dfs(int [][]matrix,int k)
{
Boolean [][]visited=new Boolean[matrix.length][matrix[0].length];
for(int i=0;i<matrix.length;i++)
{
Arrays.fill(visisted[i],false);
}
dfs(matrix,0,0);
​​​​​​​return count;
}

bfs求解:每次若满足条件则将其放入queue中去,并在弹出时判断其上下左右四个方向是否可行,numBit方法与上面一样。

public int bfs(int [][]matrix,int k)
{
Queue<Integer>queueRow=new Linkedlist<>();
Queue<Integer>queueCol=new LinkedList<>();
queueRow.add(0);
queueCol.add(0);
int count==0;
while(!queueRow.isEmpty())
{
int Row=queueRow.poll();
int Col=queueCol.poll();
visited[Row][Col]=true;
count++;
if(Row-1>0&&visited[Row-1][Col]==false){queueRow.add(Row-1);queueCol.add(Col);}
if(Row+1<matrix.length&&visited[Row+1][Col]==false){queueRow.add(Row+1);queueCol.add(Col);}
if(Col-1>0&&visited[Row][Col-1]==false){queueRow.add(Row);queueCol.add(Col-1);}
if(Col+1<matrix[0].length&&visited[Row][Col+1]==false){queueRow.add(Row);queueCol.add(Col+1);}
}
return count;
}

相关推荐

  1. 81 使用DFSBFS机器人运动范围

    2023-12-30 14:52:04       61 阅读
  2. 80 BFSDFS两种方式岛屿数量

    2023-12-30 14:52:04       60 阅读
  3. 腐烂橘子 -- DFSBFS

    2023-12-30 14:52:04       59 阅读
  4. 【剑指Offer记录】13_机器人运动范围

    2023-12-30 14:52:04       33 阅读
  5. DFSBFS基础算法框架

    2023-12-30 14:52:04       49 阅读
  6. 全球变暖(dfsbfs

    2023-12-30 14:52:04       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-30 14:52:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-30 14:52:04       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-30 14:52:04       87 阅读
  4. Python语言-面向对象

    2023-12-30 14:52:04       96 阅读

热门阅读

  1. U-net

    2023-12-30 14:52:04       68 阅读
  2. 力扣热题100道-普通数组篇

    2023-12-30 14:52:04       50 阅读
  3. mysql5.7 数据库主从同步实现

    2023-12-30 14:52:04       56 阅读
  4. NumPy 中级教程——广播(Broadcasting)

    2023-12-30 14:52:04       58 阅读
  5. 【COMP9517】Computer Vision

    2023-12-30 14:52:04       54 阅读
  6. PyTorch训练多任务模型技巧

    2023-12-30 14:52:04       63 阅读
  7. RPC介绍

    RPC介绍

    2023-12-30 14:52:04      50 阅读
  8. 单片机通用复用组件C语言

    2023-12-30 14:52:04       52 阅读
  9. 速盾cdn:cdn加速原理是什么

    2023-12-30 14:52:04       63 阅读
  10. ubuntu批量解压文件指令汇总

    2023-12-30 14:52:04       58 阅读
  11. openCv读取外网URL链接图片

    2023-12-30 14:52:04       58 阅读