2025-3-25算法打卡

一,走迷宮

1.題目描述:

給定一個?N×MN×M?的網格迷宮?GG。GG?的每個格子要么是道路,要么是障礙物(道路用?11?表示,障礙物用?00?表示)。

已知迷宮的入口位置為?(x1,y1)(x1?,y1?),出口位置為?(x2,y2)(x2?,y2?)。問從入口走到出口,最少要走多少個格子。

2.實例:

輸入第?11?行包含兩個正整數?N,MN,M,分別表示迷宮的大小。

接下來輸入一個?N×MN×M?的矩陣。若?Gi,j=1Gi,j?=1?表示其為道路,否則表示其為障礙物。

最后一行輸入四個整數?x1,y1,x2,y2x1?,y1?,x2?,y2?,表示入口的位置和出口的位置。

1≤N,M≤1021≤N,M≤102,0≤Gi,j≤10≤Gi,j?≤1,1≤x1,x2≤N1≤x1?,x2?≤N,1≤y1,y2≤M1≤y1?,y2?≤M。

示例 1

輸入

5 5 
1 0 1 1 0
1 1 0 1 1 
0 1 0 1 1
1 1 1 1 1
1 0 0 0 1
1 1 5 5 

輸出

8

3.思路:

  1. 輸入處理:讀取輸入數據并轉換為迷宮矩陣。

  2. 坐標轉換:將入口和出口的位置轉換為從0開始的索引,方便數組操作。

  3. 障礙物檢查:直接檢查入口和出口是否為障礙物,如果是則立即返回-1。

  4. BFS初始化:使用隊列來管理待處理的節點,距離數組記錄每個節點的最短步數。

  5. BFS遍歷:從入口開始,逐層擴展遍歷所有可能的路徑,每次處理一個節點時檢查其四個方向,更新可達節點的距離并加入隊列。找到出口時立即輸出結果,否則遍歷結束后返回-1。

4:代碼:

import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[][] maze = new int[n][m];// 讀取迷宮數據for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {maze[i][j] = scanner.nextInt();}}// 讀取起點和終點坐標并轉換為0-based索引int x1 = scanner.nextInt() - 1;int y1 = scanner.nextInt() - 1;int x2 = scanner.nextInt() - 1;int y2 = scanner.nextInt() - 1;// 檢查起點或終點是否為障礙物if (maze[x1][y1] == 0 || maze[x2][y2] == 0) {System.out.println(-1);return;}// 處理起點和終點相同的情況if (x1 == x2 && y1 == y2) {System.out.println(1);return;}// 初始化距離數組和隊列int[][] dist = new int[n][m];for (int[] row : dist) {Arrays.fill(row, -1);}dist[x1][y1] = 1;Queue<int[]> queue = new LinkedList<>();queue.add(new int[]{x1, y1});// 四個方向移動的增量int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};// BFS遍歷while (!queue.isEmpty()) {int[] current = queue.poll();int x = current[0];int y = current[1];for (int[] dir : directions) {int nx = x + dir[0];int ny = y + dir[1];// 檢查新坐標是否在迷宮范圍內if (nx >= 0 && nx < n && ny >= 0 && ny < m) {// 檢查是否是道路且未被訪問過if (maze[nx][ny] == 1 && dist[nx][ny] == -1) {dist[nx][ny] = dist[x][y] + 1;// 檢查是否到達終點if (nx == x2 && ny == y2) {System.out.println(dist[nx][ny]);return;}queue.add(new int[]{nx, ny});}}}}// 無法到達終點System.out.println(-1);}
}

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

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

相關文章

力扣刷題39. 組合總和

39. 組合總和 - 力扣&#xff08;LeetCode&#xff09; 需要定義一個index變量用來記錄訪問數組的下標&#xff0c;每次遞歸進行傳參&#xff0c;在搜索過程中&#xff0c;因為為了避免重復數據&#xff0c;而且允許一個元素的重復出現&#xff0c;傳入index時傳入當前遍歷的i…

ISIS-3 LSDB鏈路狀態數據庫同步

上一章我們介紹了ISIS的鄰居建立關系以及ISIS的路由器角色有哪些,在不同的網絡類型當中建立鄰居關系有什么不同,并且以實驗案例抓包的形式給大家進一步介紹了建立的過程。 這一章我們來介紹ISIS中是如何實現鏈路狀態數據庫同步的,與OSPF的鏈路狀態同步有什么不同,在不同網絡類…

Opencv計算機視覺編程攻略-第三節 圖像顏色處理

第三節 圖像顏色處理 1.顏色比較2.GrabCut分割圖像3.色調、飽和度以及亮度 1.顏色比較 主要實現逐像素的顏色比較&#xff0c;其中注意BGR顏色空間不連續&#xff0c;不利于顏色提取和區分&#xff0c;轉換到Lab空間&#xff1a; int getColorDistance(const cv::Vec3b& c…

BoomCut AI 技術創建本地化的營銷視頻

目錄 視頻翻譯實驗 交換實驗 數字人實驗 核心功能與技術亮點 適用場景 BoomCut 提供用于視頻翻譯、數字人等的 AI 技術,以快速創建本地化的營銷視頻 視頻翻譯實驗 電影電影哪吒之魔童降世換成西班牙語

論華為 Pura X 折疊屏性能檢測

在科技浪潮中&#xff0c;折疊屏手機以其創新形態掀起市場熱潮。華為 Pura X 作為華為最新折疊手機&#xff0c;承載前沿科技與精湛工藝&#xff0c;成為行業焦點。它融合先進折疊屏技術與優質材質&#xff0c;致力于打破傳統手機使用邊界&#xff0c;為用戶開啟全新體驗。但產…

【藍橋杯每日一題】3.25

&#x1f3dd;?專欄&#xff1a; 【藍橋杯備篇】 &#x1f305;主頁&#xff1a; f狐o貍x “OJ超時不是終點&#xff0c;是算法在提醒你該優化時間復雜度了&#xff01;” 目錄 3.25 差分數組 一、一維差分 題目鏈接&#xff1a; 題目描述&#xff1a; 解題思路&#xff1a;…

3.25學習總結 抽象類和抽象方法+接口+內部類+API

抽象類和抽象方法&#xff1a; 有抽象方法&#xff0c;那么類肯定是抽象類。父類不一定是抽象的&#xff0c;但如果父類中有抽象方法那一定是抽象類。 如果子類中都存在吃這個行為&#xff0c;但吃的具體東西不同&#xff0c;那么吃這個行為定義在父類里面就是抽象方法&#x…

Docker 數據卷與文件掛載

Docker 數據卷與文件掛載的區別與管理指南 在 Docker 中&#xff0c;數據卷&#xff08;Volume&#xff09;和文件掛載&#xff08;Bind Mount&#xff09;是兩種常用的數據持久化方式。它們的主要目的是將容器內的數據保存到主機上&#xff0c;以便在容器重啟或刪除后數據不會…

全面系統梳理多模態LLM對齊算法

1.alignment算法發展時間軸 2.MLMM alignment結構圖 3.目前alignment策略常見的損失函數形式 4.MLLM對齊數據構造與現有數據總結

廣告推薦算法 - 學習筆記

文章目錄 1、前言2、學習筆記2.1、什么是計算廣告系統&#xff1f; 1、前言 本篇博客&#xff0c;是我用來記錄學習廣告推薦算法的一些筆記和總結。 參考內容&#xff1a; 1、王喆&#xff1a;"深度"學習計算廣告 2、deepseek 2、學習筆記 2.1、什么是計算廣告系統…

ENSP學習day10

NAT地址轉換技術&#xff08;一&#xff09; NAT&#xff08;Network Address Translation&#xff09;地址轉換技術是一種在計算機網絡中常用的技術&#xff0c;在數據包從一個網絡傳輸到另一個網絡時&#xff0c;會對數據包中的源IP地址和目的IP地址進行修改的過程。這種技術…

數據分析中,文件解析庫解析內容樣式調整

CSV文件&#xff1a;使用Python標準庫中的csv模塊&#xff0c;通過簡單的文本解析來讀取數據。 Excel文件&#xff1a;使用專門的庫&#xff08;如openpyxl、xlrd&#xff09;來解析復雜的文件格式&#xff0c;或者使用pandas庫來簡化讀取過程。 在進行文件讀取后的格式調整時…

Swift 二分法求函數的近似解

在實際開發中會遇到一些工程問題&#xff0c;需要求解復雜函數方程的問題。使用傳統的數學方法比較難以處理。本文將使用二分法不斷獲取一個函數的近似解。 二分法&#xff1a;其基本思想是利用函數在某個區間內的連續性&#xff0c;通過不斷縮小區間范圍來逼近方程的解。 算法…

stanley 路徑跟蹤控制算法

文章目錄 寫在前面的話算法思路核心代碼1 路徑發布2 獲取車子當前位置3 預瞄路徑點4 計算航向誤差5 計算橫向誤差 完整控制代碼演示視頻 寫在前面的話 軌跡跟蹤 Trajectory Tracking 和 路徑跟蹤 Path Following 是機器人控制和自動駕駛領域中的兩個核心概念&#xff0c;盡管它…

Qt中通過QLabel實時顯示圖像

Qt中的QLabel控件用于顯示文本或圖像&#xff0c;不提供用戶交互功能。以下測試代碼用于從內置攝像頭獲取圖像并實時顯示&#xff1a; Widgets_Test.h&#xff1a; class Widgets_Test : public QMainWindow {Q_OBJECTpublic:Widgets_Test(QWidget *parent nullptr);~Widgets…

在STM32F7上實現CAN總線收發隊列

下面我將提供一個完整的STM32F7 CAN總線通信實現方案&#xff0c;包含中斷驅動的收發隊列管理。 1. CAN總線配置與隊列定義 can_bus.h #ifndef __CAN_BUS_H #define __CAN_BUS_H#include "stm32f7xx_hal.h" #include "queue.h"// CAN消息結構體 typedef …

【例3.5】位數問題(信息學奧賽一本通-1313)

【題目描述】 在所有的N位數中&#xff0c;有多少個數中有偶數個數字3?由于結果可能很大&#xff0c;你只需要輸出這個答案對12345取余的值。 【輸入】 讀入一個數N(N≤1000)。 【輸出】 輸出有多少個數中有偶數個數字3。 【輸入樣例】 2 【輸出樣例】 73 【題解代碼】 #incl…

pyQt學習筆記——Qt資源文件(.qrc)的創建與使用

Qt資源文件&#xff08;.qrc&#xff09;的創建與使用 1. 選擇打開資源2. 創建新資源3. 添加資源文件夾4. 選擇要加載的圖片文件5. 編譯resource.qrc文件6. 替換PySlide6為PyQt57. 其他說明 1. 選擇打開資源 在Qt項目中&#xff0c;可以通過windowIcon點擊選擇打開資源。 2. 創…

光電效應及普朗克常數的測定數據處理 Python實現

內容僅供參考&#xff0c;如有錯誤&#xff0c;歡迎指正&#xff0c;如有疑問&#xff0c;歡迎交流。 因為我不會Excel所以只能用Python來處理 祝大家早日擺脫物理實驗的苦海 用到的一些方法 PCHIP &#xff08;分段三次埃爾米特插值多項式&#xff09; 因為實驗時記錄的數…

2025最新3個wordpress好用的主題

紅色大氣的wordpress企業主題&#xff0c;適合服務行業的公司搭建企業官方網站使用。是一款專為中小企業和個人開發者設計的WordPress主題&#xff0c;旨在提供專業的網站構建解決方案。 通過此WordPress主題&#xff0c;用戶可以輕松創建和維護一個專業的企業網站&#xff0c…