【資料結構】Robot area 機器人運動範圍
阿新 • • 發佈:2021-10-07
目錄
Robot area 機器人運動範圍
有一個 m*n的矩陣,從【0,0】到【m-1,n-1】。機器人從【0,0】開始移動,每一次可以上下左右移動一格。不能出界,也不能進入行座標與列座標數字之和大於k的格子。計算機器人能到達多少個格子。
in:m = 2, n = 3, k = 1
out:6
in:m = 3, n = 1, k = 0
out:1
思路
使用BFS
,藉助方向陣列處理,移動的座標擴充套件。擴充套件後計算座標是否合法,是否sum<=k
因為記錄的是到達的格子數,也就是說,統計出所有能被BFS
到的座標點
public int movingCount(int m, int n, int k) { if(k==0){ return 1; } int[] dum = new int[100]; for (int i = 0; i <10 ; i++) { for (int j = 0; j < 10; j++) { dum[i*10+j]=i+j; } } HashSet<Integer> set = new HashSet<>(); Queue<int[]> queue = new LinkedList<int[]>(); int ans = 0; set.add(0); queue.offer(new int[]{0,0}); int[][] dir = {{1,0},{0,1},{-1,0},{0,-1}}; while(!queue.isEmpty()){ int[] tmp = queue.peek(); ans++; for(int d = 0;d<4;d++ ){ int x = tmp[0]+dir[d][0]; int y = tmp[1]+dir[d][1]; if(x<0||x>m-1){ continue; } if(y<0||y>n-1){ continue; } if(set.contains(x*n+y)){ continue; } if(dum[x]+dum[y]>k){ continue; } set.add(x*n+y); queue.offer(new int[]{x,y}); } queue.poll(); } return ans; }
Tag
BFS