機器人運動范圍檢測 c++

地上有一個m行n列的方格,一個機器人從坐標(0,0)的格子開始移動,它每次可以向上下左右移動一個格子,但不能進入行坐標和列坐標的位數之和大于k的格子,請問機器人能夠到達多少個格子

#include <vector> // 包含vector頭文件
#include <queue> // 包含queue頭文件class Solution { // 定義解決方案類
private:int getSum(int x, int y) { // 計算坐標數位之和int sum = 0; // 初始化和為0while (x > 0) { // 處理x坐標sum += x % 10; // 加上個位數x /= 10; // 去掉個位數}while (y > 0) { // 處理y坐標sum += y % 10; // 加上個位數y /= 10; // 去掉個位數}return sum; // 返回數位之和}public:int movingCount(int m, int n, int k) { // 計算可到達的格子數if (k < 0) return 0; // 如果k小于0,無法移動std::vector<std::vector<bool>> visited(m, std::vector<bool>(n, false)); // 記錄已訪問的格子std::queue<std::pair<int, int>> q; // 用于BFS的隊列int count = 0; // 可到達的格子數q.push({0, 0}); // 起始點加入隊列visited[0][0] = true; // 標記起始點為已訪問int dx[4] = {-1, 1, 0, 0}; // x方向的移動int dy[4] = {0, 0, -1, 1}; // y方向的移動while (!q.empty()) { // BFS主循環auto [x, y] = q.front(); // 獲取當前格子坐標q.pop(); // 從隊列中移除count++; // 增加可到達的格子數for (int i = 0; i < 4; i++) { // 嘗試四個方向的移動int nx = x + dx[i], ny = y + dy[i]; // 計算新坐標if (nx >= 0 && nx < m && ny >= 0 && ny < n && !visited[nx][ny] && getSum(nx, ny) <= k) { // 檢查新坐標是否有效q.push({nx, ny}); // 將新坐標加入隊列visited[nx][ny] = true; // 標記新坐標為已訪問}}}return count; // 返回可到達的格子數}
};

這個實現使用了廣度優先搜索(BFS)算法來解決問題。以下是主要的設計思路:

  1. 我們定義了一個Solution類,其中包含兩個主要函數:
    • getSum: 這是一個私有輔助函數,用于計算坐標的數位之和。
    • movingCount: 這是公共接口函數,用于計算機器人能夠到達的格子數量。
  2. movingCount函數中:
    • 我們使用一個二維布爾數組visited來記錄已經訪問過的格子。
    • 使用一個隊列q來進行BFS。
    • 從(0,0)開始,將其加入隊列并標記為已訪問。
    • 使用一個while循環進行BFS,每次從隊列中取出一個格子,然后嘗試向四個方向移動。
    • 對于每個新的可能位置,我們檢查:
      1. 是否在網格范圍內
      2. 是否已經被訪問過
      3. 數位之和是否不大于k
    • 如果滿足所有條件,我們將新位置加入隊列,并標記為已訪問。
    • 每訪問一個新的格子,我們就將計數器加1。
  3. 最后返回計數器的值,即為機器人能夠到達的格子數量。

這個算法的時間復雜度為O(mn),其中m和n分別是網格的行數和列數。空間復雜度也是O(mn),主要用于存儲visited數組和BFS隊列。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38347.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38347.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于大數據架構的情感分析

1 項目介紹 1.1 研究目的和意義 隨著大數據時代的到來&#xff0c;電影產業積累了海量的用戶評論數據&#xff0c;這些數據中蘊含著觀眾的情感傾向與偏好信息&#xff0c;為電影推薦和市場策略制定提供了寶貴資源。然而&#xff0c;如何高效地從這浩瀚的數據海洋中提煉出有價…

QT5:在窗口右上角顯示圖標

目錄 一、環境與目標 二、實現邏輯&#xff08;純代碼&#xff09;與效果 三、參考代碼 四、總結 一、環境與目標 qt版本&#xff1a;5.12.7 windows 11 下的 Qt Designer &#xff08;已搭建&#xff09; 目標&#xff1a;使用嵌套布局的方式將兩個按鈕顯示在窗口右上角…

《大海》這歌為何經久不衰?你看歌詞寫的多美妙!

《大海》這歌為何經久不衰&#xff1f;你看歌詞寫的多美妙&#xff01; 《大海》是一首由陳大力作詞&#xff0c;陳大力、陳秀男作曲&#xff0c;Ricky Ho編曲&#xff0c;張雨生演唱的國語流行歌曲。該曲收錄在張雨生1992年11月30日由飛碟唱片發行的同名專輯《大海》中。 作為…

【JavaEE精煉寶庫】多線程進階(2)synchronized原理、JUC類——深度理解多線程編程

一、synchronized 原理 1.1 基本特點&#xff1a; 結合上面的鎖策略&#xff0c;我們就可以總結出&#xff0c;synchronized 具有以下特性(只考慮 JDK 1.8)&#xff1a; 開始時是樂觀鎖&#xff0c;如果鎖沖突頻繁&#xff0c;就轉換為悲觀鎖。 開始是輕量級鎖實現&#xff…

廣州外貿建站模板

Yamal外貿獨立站wordpress主題 綠色的亞馬爾Yamal外貿獨立站wordpress模板&#xff0c;適用于外貿公司建獨立站的wordpress主題。 https://www.jianzhanpress.com/?p7066 賽斯科Sesko-W外貿建站WP主題 適合機械設備生產廠家出海做外貿官網的wordpress主題&#xff0c;紅橙色…

Dify自定義工具例子

1.天氣&#xff08;JSON&#xff09; {"openapi": "3.1.0","info": {"title": "Get weather data","description": "Retrieves current weather data for a location.","version": "v1…

動態規劃——打家劫舍(C++)

好像&#xff0c;自己讀的書確實有點少了。 ——2024年7月2日 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 題目描述 你是一個專業的小偷&#xff0c;計劃偷竊沿街的房屋。每間房內都藏有一定的現金&#xff0c;影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連…

Linux 靜態庫和動態庫

不管是Linux還是Windows中的庫文件其本質和工作模式都是相同的, 只不過在不同的平臺上庫對應的文件格式和文件后綴不同。程序中調用的庫有兩種 靜態庫和動態庫&#xff0c;不管是哪種庫文件本質是還是源文件&#xff0c;只不過是二進制格式只有計算機能夠識別&#xff0c;作為一…

【Node-RED 4.0.2】4.0版本新增特性(官方版)

二、重要功能 *1.時間戳格式改進 過去&#xff0c;node-red 只提供了 最原始的 timestamp 的格式&#xff08;1970-01-01 ~ now&#xff09; 但是現在&#xff0c;額外增加了 2 種格式&#xff1a; ISO 8601 -A COMMON FORMAT&#xff08;YYYY-MM-DDTHH:mm:ss:sssZ&#xff…

思考如何學習一門編程語言?

一、什么是編程語言 編程語言是一種用于編寫計算機程序的人工語言。通過編程語言&#xff0c;程序員可以向計算機發出指令&#xff0c;控制計算機執行各種任務和操作。編程語言由一組語法規則和語義規則組成&#xff0c;這些規則定義了如何編寫代碼以及代碼的含義。 編程語言…

linux和mysql基礎指令

Linux中nano和vim讀可以打開記事文件。 ifdown ens33 ifup ens33 關閉&#xff0c;開啟網絡 rm -r lesson1 gcc -o code1 code1.c 編譯c語言代碼 ./code1 執行c語言代碼 rm -r dir 刪除文件夾 mysql> show databases-> ^C mysql> show databases; -------…

常見網絡端口號

在網絡工程領域&#xff0c;了解和掌握默認端口號是至關重要的。端口號是計算機網絡中最基本的概念之 一&#xff0c;用于標識特定的網絡服務或應用程序。 1、什么是端口號&#xff1f; 端口號是計算機網絡中的一種標識&#xff0c;用于區分不同的網絡服務和應用程序。每個端…

【C++進階學習】第五彈——二叉搜索樹——二叉樹進階及set和map的鋪墊

二叉樹1&#xff1a;深入理解數據結構第一彈——二叉樹&#xff08;1&#xff09;——堆-CSDN博客 二叉樹2&#xff1a;深入理解數據結構第三彈——二叉樹&#xff08;3&#xff09;——二叉樹的基本結構與操作-CSDN博客 二叉樹3&#xff1a;深入理解數據結構第三彈——二叉樹…

想要打造超高性能的接口API?試試這12條小技巧。

1. 并行處理 簡要說明 舉個例子&#xff1a;在價格查詢鏈路中&#xff0c;我們需要獲取多種獨立的價格配置項信息&#xff0c;如基礎價、折扣價、商戶活動價、平臺活動價等等。 CompletableFuture 是銀彈嗎&#xff1f; 使用 CompletableFuture 的確能夠幫助我們解決許多獨…

走進IT的世界

引言 隨著高考的結束&#xff0c;對于即將踏入IT&#xff08;信息技術&#xff09;領域的新生而言&#xff0c;這個假期不僅是放松身心的時間&#xff0c;更是提前規劃、深化專業知識、為大學生活奠定堅實基礎的寶貴機會。以下是一份詳盡的高考假期預習與規劃指南&#xff0c;…

Android自動化測試實踐:uiautomator2 核心功能與應用指南

Android自動化測試實踐&#xff1a;uiautomator2 核心功能與應用指南 uiautomator2 是一個用于Android應用的自動化測試Python庫&#xff0c;支持多設備并行測試操作。它提供了豐富的API來模擬用戶對App的各種操作&#xff0c;如安裝、卸載、啟動、停止以及清除應用數據等。此外…

30個!2024重大科學問題、工程技術難題和產業技術問題發布

【SciencePub學術】中國科協自2018年開始&#xff0c;組織開展重大科技問題難題征集發布活動&#xff0c;引導廣大科技工作者緊跟世界科技發展大勢&#xff0c;聚焦國家重大需求&#xff0c;開展原創性、引領性研究&#xff0c;不斷夯實高質量發展的科技支撐。 自2024年征集活動…

飛書文檔轉markdown 超級快捷方法。

直接使用那個github的高贊官方的工具轉換&#xff0c;需要設置什么小應用那種東西&#xff0c;還要審批&#xff0c;社恐人表示怕了怕了。而且文檔我分享出去&#xff0c;是有權限的&#xff0c;反正無論如何生成不了 我的方法是 直接全選&#xff0c;然后粘貼進Arya - 在線 …

C#的五大設計原則-solid原則

什么是C#的五大設計原則&#xff0c;我們用人話來解釋一下&#xff0c;希望小伙伴們能學會&#xff1a; 好的&#xff0c;讓我們以一種幽默的方式來解釋C#的五大設計原則&#xff08;SOLID&#xff09;&#xff1a; 單一職責原則&#xff08;Single Responsibility Principle…

PCL 漸進形態過濾器實現地面分割

點云地面分割 一、代碼實現二、結果示例?? 概述 漸進形態過濾器:采用先腐蝕后膨脹的運算過程,可以有效濾除場景中的建筑物、植被、車輛、行人以及交通附屬設施,保留道路路面及路緣石點云。 一、代碼實現 #include <iostream> #include <pcl/io/pcd_io.h> #in…