classSolution { public: intmovingCount(int m, int n, int k){ int id[2] = {0, 1}; int jd[2] = {1, 0}; vector<vector<bool>> visited(m, vector<bool>(n, false)); queue<pair<int, int>> q; q.push(make_pair(0, 0)); visited[0][0] = true; int ans = 1;
while (!q.empty()) { pair<int, int> cur = q.front(); q.pop(); int i = cur.first, j = cur.second; for (int mv = 0; mv < 2; mv++) { if (i + id[mv] < m && j + jd[mv] < n && !visited[i + id[mv]][j + jd[mv]]) { int sum = 0; int loci = i + id[mv], locj = j + jd[mv]; while (loci > 0) { sum += loci % 10; loci /= 10; } while (locj > 0) { sum += locj % 10; locj /= 10; } if (sum <= k) { q.push(make_pair(i + id[mv], j + jd[mv])); ans++; } visited[i + id[mv]][j + jd[mv]] = true; } } }