c++ 面試題(1)-----深度優先搜索(DFS)實現

  • 操作系統:ubuntu22.04
  • IDE:Visual Studio Code
  • 編程語言:C++11

題目描述

地上有一個 m 行 n 列的方格,從坐標 [0,0] 起始。一個機器人可以從某一格移動到上下左右四個格子,但不能進入行坐標和列坐標的數位之和大于 k 的格子。

例如:當 k = 18 時,機器人可以進入方格 [35, 39](因為 3+5 + 3+9 = 20 > 18,所以不能進入)
問:機器人總共能到達多少個格子?

示例

輸入:m=2, n=3, k=1
輸出:3

解釋:

機器人從 [0,0] 出發,可到達以下格子:

  • [0,0]
  • [0,1]
  • [0,2]

但 [1,0] 的數位和為 1+0=1 ≤ 1,也可以走;
但 [1,1] 的數位和為 1+1=2 > 1,不能進入。

所以總共有 3 個格子可以進入。

解法思路

這是一個典型的 搜索類問題,可以用:

深度優先搜索(DFS)
或 廣度優先搜索(BFS)

我們只需要從起點 (0, 0) 開始,向四個方向進行遞歸/遍歷,只要滿足條件就繼續探索,并統計所有能到達的格子。

代碼示例

#include <iostream>
#include <vector>using namespace std;class Solution {
public:int movingCount( int m, int n, int k ){vector< vector< bool > > visited( m, vector< bool >( n, false ) );return dfs( 0, 0, m, n, k, visited );}int dfs( int i, int j, int m, int n, int k, vector< vector< bool > >& visited ){// 邊界條件判斷 or 已訪問過 or 不滿足數位和條件if ( i < 0 || i >= m || j < 0 || j >= n || visited[ i ][ j ] || bitSum( i ) + bitSum( j ) > k )return 0;visited[ i ][ j ] = true;  // 標記為已訪問// 向四個方向探索return 1 + dfs( i + 1, j, m, n, k, visited ) + dfs( i - 1, j, m, n, k, visited ) + dfs( i, j + 1, m, n, k, visited ) + dfs( i, j - 1, m, n, k, visited );}// 計算一個整數的各位數字之和int bitSum( int x ){int sum = 0;while ( x > 0 ){sum += x % 10;x /= 10;}return sum;}
};// 測試代碼
int main()
{Solution solution;cout << solution.movingCount( 2, 3, 1 ) << endl;  // 輸出: 3cout << solution.movingCount( 3, 3, 0 ) << endl;  // 輸出: 1return 0;
}

運行結果

3
1

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

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

相關文章

【匯編逆向系列】七、函數調用包含多個參數之浮點型- XMM0-3寄存器

目錄 1. 匯編代碼 1.1 debug編譯 1.2 release編譯 2. 匯編分析 2.1 浮點參數傳遞規則 2.2 棧幀rsp的變化時序 2.3 參數的訪問邏輯 2.4 返回值XMM0寄存器 3. 匯編轉化 3.1 Debug編譯 3.2 Release 編譯 3.3 C語言轉化 1. 匯編代碼 上一節介紹了整型的函數傳參&#x…

華為云Flexus+DeepSeek征文 | 從零到一:用Flexus云服務打造低延遲聯網搜索Agent

作者簡介 我是摘星&#xff0c;一名專注于云計算和AI技術的開發者。本次通過華為云MaaS平臺體驗DeepSeek系列模型&#xff0c;將實際使用經驗分享給大家&#xff0c;希望能幫助開發者快速掌握華為云AI服務的核心能力。 目錄 作者簡介 前言 1. 項目背景與技術選型 1.1 項目…

【多智能體】受木偶戲啟發實現多智能體協作編排

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一個正在變禿、變強的文藝傾年。 &#x1f514;本專欄《人工智能》旨在記錄最新的科研前沿&#xff0c;包括大模型、具身智能、智能體等相關領域&#xff0c;期待與你一同探索、學習、進步&#xff0c;一起卷起來叭&#xff…

Java八股文——Spring篇

文章目錄 Java八股文專欄其它文章Java八股文——Spring篇SpringSpring的IoC和AOPSpring IoC實現機制Spring AOP實現機制 動態代理JDK ProxyCGLIBByteBuddy Spring框架中的單例Bean是線程安全的嗎&#xff1f;什么是AOP&#xff0c;你們項目中有沒有使用到AOPSpring中的事務是如…

NineData數據庫DevOps功能全面支持百度智能云向量數據庫 VectorDB,助力企業 AI 應用高效落地

NineData 的數據庫 DevOps 解決方案已完成對百度智能云向量數據庫 VectorDB 的全鏈路適配&#xff0c;成為國內首批提供 VectorDB 原生操作能力的服務商。此次合作聚焦 AI 開發核心場景&#xff0c;通過標準化 SQL 工作臺與細粒度權限管控兩大能力&#xff0c;助力企業安全高效…

開源技術驅動下的上市公司財務主數據管理實踐

開源技術驅動下的上市公司財務主數據管理實踐 —— 以人造板制造業為例 引言&#xff1a;財務主數據的戰略價值與行業挑戰 在資本市場監管日益嚴格與企業數字化轉型的雙重驅動下&#xff0c;財務主數據已成為上市公司財務治理的核心基礎設施。對于人造板制造業而言&#xff0…

借助它,普轉也能獲得空轉信息?

在生命科學研究領域&#xff0c;轉錄組技術是探索基因表達奧秘的有力工具&#xff0c;在疾病機制探索、生物發育進程解析等諸多方面取得了顯著進展。然而&#xff0c;隨著研究的深入&#xff0c;研究人員發現普通轉錄組只能提供整體樣本中的基因表達水平信息&#xff0c;卻無法…

synchronized 學習

學習源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.應用場景 不超賣&#xff0c;也要考慮性能問題&#xff08;場景&#xff09; 2.常見面試問題&#xff1a; sync出…

Java事務回滾詳解

一、什么是事務回滾&#xff1f; 事務回滾指的是&#xff1a;當執行過程中發生異常時&#xff0c;之前對數據庫所做的更改全部撤銷&#xff0c;數據庫狀態恢復到事務開始前的狀態。這是數據庫“原子性”原則的體現。 二、Spring 中的 Transactional 默認行為 在 Spring 中&am…

云災備數據復制技術研究

云災備數據復制技術&#xff1a;數字時代的“安全氣囊” 在當今信息化時代&#xff0c;數據就像城市的“生命線”&#xff0c;一旦中斷&#xff0c;后果不堪設想。想象一下&#xff0c;如果政務系統突然崩潰&#xff0c;成千上萬的市民服務將陷入癱瘓。這就是云災備技術的重要…

如何處理Shopify主題的顯示問題:實用排查與修復指南

在Shopify店鋪運營過程中&#xff0c;主題顯示問題是影響用戶體驗與品牌形象的常見痛點。可能是字體錯位、圖片無法加載、移動端顯示混亂、功能失效等&#xff0c;這些都可能造成客戶流失和轉化下降。 本文將從問題識別、原因分析、修復方法到開發者建議全方位解讀如何高效解決…

前端監控方案詳解

一、前端監控方案是什么&#xff1f; 前端監控方案是一套系統化的工具和流程&#xff0c;用于收集、分析和報告網站或Web應用在前端運行時的各種性能指標、錯誤日志、用戶行為等數據。它通常包括以下幾個核心模塊&#xff1a; 性能監控&#xff1a;頁面加載時間、資源加載時間…

Camera相機人臉識別系列專題分析之十二:人臉特征檢測FFD算法之libvega_face.so數據結構詳解

【關注我&#xff0c;后續持續新增專題博文&#xff0c;謝謝&#xff01;&#xff01;&#xff01;】 上一篇我們講了&#xff1a; Camera相機人臉識別系列專題分析之十一&#xff1a;人臉特征檢測FFD算法之低功耗libvega_face.so人臉屬性(年齡&#xff0c;性別&#xff0c;膚…

如何配置HarmonyOS 5與React Native的開發環境?

配置 HarmonyOS 5 與 React Native 的開發環境需遵循以下步驟 一、基礎工具安裝 ?DevEco Studio 5.0? 從 HarmonyOS 開發者官網 下載安裝勾選組件&#xff1a; HarmonyOS SDK (API 12)ArkTS 編譯器JS/ArkTS 調試工具HarmonyOS 本地模擬器 ?Node.js 18.17 # 安裝后驗證版…

kotlin kmp 副作用函數 effect

在 Kotlin Multiplatform (KMP) Compose 中&#xff0c;“effect functions”&#xff08;或“effect handlers”&#xff09;是專門的可組合函數&#xff0c;用于在 UI 中管理副作用。 在 Compose 中&#xff0c;可組合函數應該是“純”的和聲明式的。這意味著它們應該理想地…

3.3.1_1 檢錯編碼(奇偶校驗碼)

從這節課開始&#xff0c;我們會探討數據鏈路層的差錯控制功能&#xff0c;差錯控制功能的主要目標是要發現并且解決一個幀內部的位錯誤&#xff0c;我們需要使用特殊的編碼技術去發現幀內部的位錯誤&#xff0c;當我們發現位錯誤之后&#xff0c;通常來說有兩種解決方案。第一…

【Pandas】pandas DataFrame isna

Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值&#xff08;NaN&#xff09;DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充&#xff08;即“下一個有效觀測值”&#xff09…

MQTT協議:物聯網時代的通信基石

MQTT協議&#xff1a;物聯網時代的通信基石 在當今快速發展的物聯網&#xff08;IoT&#xff09;時代&#xff0c;設備之間的通信變得尤為重要。MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;協議作為一種輕量級的消息傳輸協議&#xff0c;正逐漸成為物聯…

Excel 表格內批量添加前綴與后綴的實用方法

我們經常需要為 Excel 表格中的內容統一添加前綴或后綴&#xff0c;例如給編號加“NO.”、給姓名加“會員_”等。手動操作效率低&#xff0c;本文將介紹幾種實用的方法&#xff0c;幫助你快速完成批量添加前綴和后綴的操作。 使用“&”運算符添加前綴或后綴&#xff08;推…

uniapp 實現騰訊云IM群文件上傳下載功能

UniApp 集成騰訊云IM實現群文件上傳下載功能全攻略 一、功能背景與技術選型 在團隊協作場景中&#xff0c;群文件共享是核心需求之一。本文將介紹如何基于騰訊云IMCOS&#xff0c;在uniapp中實現&#xff1a; 群內文件上傳/下載文件元數據管理下載進度追蹤跨平臺文件預覽 二…