BFS 广度优先
package com.test1;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Solution {
boolean visted [][];
public int movingCount(int m, int n, int k) {
visted=new boolean[m+1][n+1];
Queue<List<Integer>> queue=new LinkedList<>();
queue.offer(Arrays.asList(0,0));
visted[0][0]=true;
int res=1;
while(!queue.isEmpty()){
int size= queue.size();
for(int i=0;i<size;i++){
List<Integer> curList= queue.poll();
int m1=curList.get(0);int n1=curList.get(1);
if(isVilid(m,n,m1-1,n1,k)) {
queue.offer(Arrays.asList(m1-1,n1));
visted[m1-1][n1]=true;
res++;
}
if(isVilid(m,n,m1+1,n1,k)) {
queue.offer(Arrays.asList(m1+1,n1));
visted[m1+1][n1]=true;
res++;
}
if(isVilid(m,n,m1,n1-1,k)) {
queue.offer(Arrays.asList(m1,n1-1));
visted[m1][n1-1]=true;
res++;
}
if(isVilid(m,n,m1,n1+1,k)) {
queue.offer(Arrays.asList(m1,n1+1));
visted[m1][n1+1]=true;
res++;
}
}
}
return res;
}
public boolean isReach(int m,int n,int k){
int sum1=0;int sum2=0;
while(m/10!=0){
sum1+=m%10;
m=m/10;
}
sum1+=m%10;
while(n/10!=0){
sum2+=n%10;
n=n/10;
}
sum2+=n%10;
return sum1+sum2<=k;
}
public boolean isVilid(int m,int n,int m1,int n1,int k){
if(m1>=0&&m1<m&&n1>=0&&n1<n&&!visted[m1][n1]&&isReach(m1, n1, k)) return true;
else return false;
}
}