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

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

java 复制代码
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方法与上面一样。

java 复制代码
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;
}
相关推荐
ha20428941945 分钟前
Linux操作系统学习之---线程控制
java·linux·学习
清辞85311 分钟前
C++入门(底层知识C与C++的不同)
开发语言·c++·算法
Knight_AL13 分钟前
Spring AOP 中@annotation的两种写法详解
java·spring
某空m17 分钟前
【Android】BottomNavigationView实现底部导航栏
android·java
顾漂亮20 分钟前
Spring AOP 实战案例+避坑指南
java·后端·spring
~kiss~21 分钟前
图像处理~多尺度边缘检测算法
图像处理·算法·计算机视觉
Mr.看海38 分钟前
机器学习鼻祖级算法——使用SVM实现多分类及Python实现
算法·机器学习·支持向量机
SimonKing1 小时前
Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex
java·后端·程序员
.格子衫.1 小时前
018数据结构之队列——算法备赛
数据结构·算法
光军oi1 小时前
JAVA全栈JVM篇————初识JVM
java·开发语言·jvm