算法題(114):矩陣距離

審題:

本題需要我們找出所有0距離最近的1的曼哈頓距離

思路:
方法一:多源bfs

分析曼哈頓距離:

求法1:公式法,帶入題目公式,利用|x1-x2|+|y1-y2|求出

求法2:曼哈頓距離就是最短距離

本題有多個起源點,也就是1,我們可以把他們都加入到隊列中,然后按照正常的bfs流程走。

若用單源的bfs走就是遍歷每個0去搜索,不過會超時

解題:

(1)預處理

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
const int N = 1010;
char vv[N][N];//記錄字符
typedef pair<int,int> PII;
queue<PII> q;//記錄待走坐標
int dis[N][N];//記錄到該坐標最短距離
//方向數組
int dx[] = {0,0,1,-1};
int dy[] = {1,-1,0,0};

1.用char二維數組記錄是因為題目中給的是不帶空格的輸入,用int會被識別為一個數字

(2)main函數邏輯

int main()
{//錄入數據cin >> n >> m;memset(dis,-1,sizeof(dis));for(int i = 1; i <= n ; i++){for(int j = 1; j <= m; j++){cin >> vv[i][j];if(vv[i][j] == '1')//記錄坐標和標記距離{q.push({i,j});dis[i][j] = 0;}}}bfs();//輸出數據for(int i = 1; i <= n ; i++){for(int j = 1; j <= m; j++){cout << dis[i][j] << " ";}cout << endl;}return 0;
}

(3)bfs

void bfs()
{while(!q.empty()){size_t size = q.size();for(int i = 0; i < size; i++){auto pos = q.front();q.pop();for(int j = 0; j < 4; j++){int newx = pos.first +  dx[j];int newy = pos.second + dy[j];if(newx>=1&&newx<=n&&newy>=1&&newy<=m&&dis[newx][newy] == -1){dis[newx][newy] = dis[pos.first][pos.second] + 1;q.push({newx,newy});}}}}
}

1.這里我們不能使用vector的二維方向數組,因為對空間有要求

2.核心就是對沒遍歷過的位置進行距離更新,因為bfs的性質,最先搜索到的就是最短距離。

而當前位置最短距離就是前一個位置的最短距離+1

矩陣距離

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

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

相關文章

LLM 性能優化有哪些手段?

LLM(大語言模型)性能優化是一個多維度、多層次的系統工程,涉及從提示工程到模型微調,從推理加速到系統架構優化等多個方面。以下是當前主流的優化手段及其技術細節: 一、提示工程(Prompt Engineering) 提示工程是優化LLM性能最直接、成本最低的方法,適用于快速原型開發…

群體智能避障革命:RVO算法在Unity中的深度實踐與優化

引言&#xff1a;游戲群體移動的挑戰與進化 在《全面戰爭》中萬人戰場恢弘列陣&#xff0c;在《刺客信條》鬧市里人群自然涌動&#xff0c;這些令人驚嘆的場景背后&#xff0c;都離不開一個關鍵技術——群體動態避障。傳統路徑規劃算法&#xff08;如A*&#xff09;雖能解決單…

I.MX6ULL 交叉編譯環境配置與使用

一、什么是交叉編譯 我們一般開發程序在自己的電腦上開發&#xff0c;運行的時候將程序燒錄到板子運行。但我們的開發平臺是X86架構&#xff0c;而I.MX6ULL是ARM架構&#xff0c;所以需要一個在 X86 架構的 PC 上運行&#xff0c;可以編譯 ARM 架構代碼的 GCC 編譯器&#xff0…

Harmony OS“一多” 詳解:基于窗口變化的斷點自適應實現

一、一多開發核心概念&#xff08;18N模式&#xff09; 目標&#xff1a;一次開發多端部署 解決的問題&#xff1a; 1、界面級一多&#xff1a;適配不同屏幕尺寸 2、功能級一多&#xff1a;設備功能兼容性處理(CanIUser) 3、工…

SpringMvc獲取請求數據

基本參數 RequestMapping("save5") ResponseBody public User save5(String name, int age) {User user new User();user.setName(name);user.setAge(age);return user; } 在url中將name與age進行編寫&#xff0c;通過框架可以提取url中的name與age&#xff0c;這…

大模型持續學習方案解析:災難性遺忘的工業級解決方案

引言 隨著大型語言模型&#xff08;LLMs&#xff09;如 GPT 系列、BERT 等在自然語言處理領域取得突破性進展&#xff0c;它們強大的理解和生成能力已經滲透到各行各業。然而&#xff0c;這些模型通常是在海量靜態數據集上進行一次性預訓練的。現實世界是動態變化的&#xff0…

推薦系統(二十二):基于MaskNet和WideDeep的商品推薦CTR模型實現

在上一篇文章《推薦系統&#xff08;二十一&#xff09;&#xff1a;基于MaskNet的商品推薦CTR模型實現》中&#xff0c;筆者基于 MaskNet 構建了一個簡單的模型。筆者所經歷的工業級實踐證明&#xff0c;將 MaskNet 和 Wide&Deep 結合應用&#xff0c;可以取得不錯的效果&…

【爬蟲案例】采集 Instagram 平臺數據幾種方式(python腳本可直接運行)

更多內容請見: 爬蟲和逆向教程-專欄介紹和目錄 文章目錄 一、概述1.1 Instagram基礎信息1.2 Instagram平臺架構核心技術棧1.3 采集提示1.4 幾種采集方案對比二、四種采集方案分析三、寫爬蟲采集Instagram案例3.1 采集作品信息并下載視頻或圖片(無需登錄)3.2 explore接口的采…

OFP--2018

文章目錄 AbstractIntroductionRelated Work2D object detection3D object detection from LiDAR3D object detection from imagesIntegral images 3D Object Detection ArchitectureFeature extractionOrthographic feature transformFast average pooling with integral imag…

LINUX 4 tar -zcvf -jcvf -Jcvf -tf -uf

cp -r mv: 1.移動文件到目錄 2.文件改名 3.目錄改名 s 上面是打包 下面是打包并壓縮

linux signal up/down/down_interruptiable\down_uninterruptiable使用

在Linux內核中&#xff0c;down, down_interruptible, down_killable, 和 up 是用于操作信號量&#xff08;semap hores&#xff09;的函數&#xff0c;它們用于進程同步和互斥。以下是對這些函數的簡要說明。 1&#xff0c;down(&sem): 這個函數用于獲取信號量。如果信號…

使用人工智能大模型DeepSeek,如何進行論文潤色和去重?

今天我們學習人工智能&#xff0c;如何協助我們進行論文潤色和去重。手把手的學習視頻地址請訪問https://edu.csdn.net/learn/40402/666422 第一步在騰訊元寶對話框中輸入如何協助老師做論文潤色&#xff0c;通過提問&#xff0c;我們了解了老師寫論文潤色的步驟和建議。潤色的…

UE5 Simulation Stage

首先將Grid2D創建出來&#xff0c;然后設置值&#xff0c;Grid2D類似于在Niagara系統中的RenderTarget2D&#xff0c;可以進行繪制&#xff0c;那么設置大小為512 * 512 開啟Niagara粒子中的Simulation Stage 然后開始編寫我們的自定義模塊 模塊很簡單&#xff0c;TS就是Textur…

OpenCV 圖形API(6)將一個矩陣(或圖像)與一個標量值相加的函數addC()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 addC 函數將給定的標量值加到給定矩陣的每個元素上。該功能可以用矩陣表達式替換&#xff1a; dst src1 c \texttt{dst} \texttt{src1} \te…

多GPU訓練

寫在前面 限于財力不足&#xff0c;本機上只有一個 GPU 可供使用&#xff0c;因此這部分的代碼只能夠稍作了解&#xff0c;能夠使用的 GPU 也只有一個。 多 GPU 的數據并行&#xff1a;有幾張卡&#xff0c;對一個小批量數據&#xff0c;有幾張卡就分成幾塊&#xff0c;每個 …

0基礎 | 硬件 | 電源系統 一

降壓電路LDO 幾乎所有LDO都是基于此拓撲結構 圖 拓撲結構 LDO屬于線性電源&#xff0c;通過控制開關管的導通程度實現穩壓&#xff0c;輸出紋波小&#xff0c;無開關噪聲 線性電源&#xff0c;IoutIin&#xff0c;發熱功率P電壓差△U*電流I&#xff0c;轉換效率Vo/Vi LDO不適…

mysql數據庫中getshell的方式總結

mysql數據庫中getshell的方式總結 MySQL版本大于5.0&#xff0c;MySQL 5.0版本以上會創建日志文件,我們通過修改日志文件的全局變量,就可以GetSHELL,下面這篇文章主要給大家介紹了關于mysql數據庫中getshell的方式,需要的朋友可以參考下 outfile和dumpfile寫shell 利用條件 …

基于Python的微博數據采集

摘要 本系統通過逆向工程微博移動端API接口,實現了對熱門板塊微博內容及用戶評論的自動化采集。系統采用Requests+多線程架構,支持遞歸分頁采集和動態請求頭模擬,每小時可處理3000+條數據記錄。關鍵技術特征包括:1)基于max_id的評論分頁遞歸算法 2)HTML標簽清洗正則表達…

WiFi加密協議

目錄 1. 認證(Authentication)? ?1.1 開放系統認證(Open System Authentication)? 1.2 共享密鑰認證(Shared Key Authentication)? ?1.3 802.1X/EAP認證(企業級認證)? ?2. 關聯(Association)? ?3. 加密協議(Security Handshake)? ?整體流程總結?…

MySQL篇(六)MySQL 分庫分表:應對數據增長挑戰的有效策略

MySQL篇&#xff08;六&#xff09;MySQL 分庫分表&#xff1a;應對數據增長挑戰的有效策略 MySQL篇&#xff08;六&#xff09;MySQL 分庫分表&#xff1a;應對數據增長挑戰的有效策略一、引言二、為什么需要分庫分表2.1 性能瓶頸2.2 存儲瓶頸2.3 高并發壓力 三、分庫分表的方…