1. 程式人生 > 實用技巧 >劍指offer-13-機器人的運動範圍

劍指offer-13-機器人的運動範圍

思路:

寬度優先搜尋

確定起點座標後,向四周進行搜尋

在節點擴充套件時需要判斷是否重複,是否出邊界,橫縱座標數字之和小於K

程式碼:

class Solution {
public:
    //座標進行計算
    int single_sum(int x)
    {
        int s=0;
        while(x) s+=x%10,x/=10;
        return s;
    }
    int get_sum(pair<int,int>p)
    {
        return single_sum(p.first) + single_sum(p.second);
    }
    
int movingCount(int threshold, int rows, int cols) { int res=0; //判斷為空條件 if(!rows || !cols) return 0; //判斷矩陣中搜索重複問題 vector<vector<bool>> st(rows,vector<bool>(cols)); //將矩陣的座標看成是一個點放入佇列中 queue<pair<int,int>> q; q.push({
0,0}); int dx[4]={-1,0,1,0}, dy[4]={0,-1,0,1}; while(q.size()) { auto t=q.front(); q.pop(); //判斷邊界條件 if(get_sum(t)> threshold ||st[t.first][t.second]) continue; res ++; //對走過的點進行標記 st[t.first][t.second] = true
; //機器人移動 for(int i=0;i<4;i++) { int x=t.first + dx[i], y=t.second+dy[i]; //判斷 if(x>=0 && x<rows && y>=0 && y<cols) q.push({x,y}) } } return res; } };