当前位置: 首页 > news >正文

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;
}

http://www.lryc.cn/news/270470.html

相关文章:

  • vue-springboot基于JavaWeb的家装一体化商城平台guptn
  • .NET进阶篇06-async异步、thread多线程2
  • java 方法
  • HarmonyOS 组件通用属性之通用事件 文档参数讲解(点击事件)
  • 毕业设计之开题报告
  • 【数据结构】详细剖析线性表
  • 通过数字证书对PDF电子文件进行数字签名/盖章
  • 2007~2016 年税调经纬度及其所处的省市区县乡镇数据
  • SLAM学习入门--编程语言
  • Go语言程序设计-第6章--方法
  • AI按理说应该最擅长理工,为啥先冲击文艺行业?
  • 蓝牙物联网移动硬件数据传输系统解决方案
  • Linux下Web服务器工作模型及Nginx工作原理详解
  • AJAX: 整理2:学习原生的AJAX,这边借助express框架
  • 二、计算机软件及其使用-文字处理软件 Word 2016
  • Linux LVM逻辑卷
  • Hive生产调优介绍
  • 如何理解鼠标点击事件在程序中的处理
  • 基于JWT的用户token验证
  • 通过 conda 安装 的 detectron2
  • 嵌入式开发——SPI OLED屏幕案例
  • ibm上电时序(视频内容)
  • 如何在Vue.js中使用$emit进行组件通信
  • SPSS相关统计学知识精要回顾-大家都来做做
  • React Native 从类组件到函数组件
  • Redis 快速搭建与使用
  • SpringBoot集成etcd,实现实时监听,实现配置中心
  • JavaScript元素根据父级元素宽高缩放
  • 易趋产品升级(EasyTrack 11_V1.3) | 集成飞书、WPS、个性化设置,增强团队协作和用户体验
  • 帆软FineBi V6版本经验总结