寬度有限搜索BFS搜索數及B3625 迷宮尋路 P1451 求細胞數量 B3626 跳躍機器人

寬度有限搜索BFS搜索

B3625 迷宮尋路

題面

題目描述

機器貓被困在一個矩形迷宮里。

迷宮可以視為一個?n×m?矩陣,每個位置要么是空地,要么是墻。機器貓只能從一個空地走到其上、下、左、右的空地。

機器貓初始時位于?(1,1) 的位置,問能否走到?(n,m)?位置。

輸入格式

第一行,兩個正整數 n,m。

接下來?n?行,輸入這個迷宮。每行輸入一個長為?m?的字符串,#?表示墻,.?表示空地。

輸出格式

僅一行,一個字符串。如果機器貓能走到 (n,m),則輸出?Yes;否則輸出?No

輸入輸出樣例

輸入 #1?

3 5
.##.#
.#...
...#.

輸出 #1?

Yes

說明/提示

樣例解釋

路線如下:(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)(1,1)→(2,1)→(3,1)→(3,2)→(3,3)→(2,3)→(2,4)→(2,5)→(3,5)

題解

BFS的思路是從標點(1,1)開始逐層往外擴展,此時我們選擇建立一個隊列用來保存待訪問的點,只要隊列非空,判斷越界情況和其他非法情況后一直訪問相鄰位置,可以用一個結構組表示x,y坐標。為了避免重復訪問的情況,我們使用vis函數。訪問一個點后把vis[x][y]負值與1。到最后如果隊列的某個點到了(n,m) 終點,答案設為true,輸出這個情況YES。

代碼

#include <bits/stdc++.h>
using namespace std;int n, m, isOk;
char a[105][105];
bool vis[105][105];struct Pos {int x, y;Pos(int ax, int ay) {x = ax, y = ay;}
};void bfs() {queue<Pos> q;q.push(Pos(1, 1));while(!q.empty()) {Pos now = q.front();q.pop();int x = now.x, y = now.y;if(x < 1 || x > n) continue;if(y < 1 || y > m) continue;if(a[x][y] == '#') continue;if(vis[x][y]) continue;vis[x][y] = 1;if(x == n && y == m) isOk = true;q.push(Pos(x + 1, y));q.push(Pos(x - 1, y));q.push(Pos(x, y + 1));q.push(Pos(x, y - 1));}}int main() {cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> a[i][j];bfs();if(isOk)cout << "Yes" << endl;elsecout << "No" << endl;return 0;
}

P1451 求細胞數量

題面

題目描述

一矩形陣列由數字?0?到?9?組成,數字?1?到?9?代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。

輸入格式

第一行兩個整數代表矩陣大小 n?和?m。

接下來?n?行,每行一個長度為?m?的只含字符?0?到?9?的字符串,代表這個?n×m?的矩陣。

輸出格式

一行一個整數代表細胞個數。

輸入輸出樣例

輸入 #1

4 10
0234500067
1034560500
2045600671
0000000089

輸出 #1

4

題解

這道題的意思,只要相鄰的數不是0,那么它和其他相鄰的數構成一個細胞,例如樣例中的12是一個細胞,23453456456是一個細胞,67,567189,一共四個細胞。這一道題可以用BFS也能用DFS搜索方法。在隊列非空的狀態依次判斷非法情況,避免重復訪問,判斷是否到終點并尋找答案,繼續訪問相鄰位置。在main循環中bfs之前要判斷這個數是否是細胞,是否訪問過。Vis可以當訪問數組的同時在這類題當成染色“Flood Fill”?

注意事項:

  • 若(x,y)是細胞且無色,則答案+1、并將其所屬整個細胞染色
  • BFS 的實現 :當隊列非空,訪問隊首,并將相鄰結點人隊?

代碼

#include <bits/stdc++.h>
using namespace std;
int n, m, ans;
char a[105][105];
bool vis[105][105];
struct Pos {int x, y;Pos(int ax = 0, int ay = 0) {x = ax; // 該結點的 x 值初始化為 axy = ay; // 該結點的 y 值初始化為 ay} 
};
// 從 (x, y) 開始 BFS 整個細胞
void bfs(int x, int y) {queue<Pos> q;q.push(Pos(x, y)); // 將 (x,y) 入隊while(!q.empty()) { // 當隊列非空Pos now = q.front(); // 現在處理隊首結點q.pop(); // 隊首出隊int x = now.x, y = now.y;if(x < 1 || x > n) continue;if(y < 1 || y > m) continue;if(a[x][y] == '0') continue;    // 不是細胞點if(vis[x][y]) continue;       // 如果這個點被訪問過則跳過vis[x][y] = 1;       // 用 vis 數組避免重復訪問q.push(Pos(x+1, y)); // 將上方結點加入到隊列q.push(Pos(x-1, y)); // 將下方結點加入到隊列q.push(Pos(x, y+1)); // 將左方結點加入到隊列q.push(Pos(x, y-1)); // 將右方結點加入到隊列}
}
int main() {cin >> n >> m;for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)cin >> a[i][j];for(int x = 1; x <= n; x++)for(int y = 1; y <= m; y++)if(a[x][y]!='0'&& vis[x][y]==0) { // (x,y) 這個點是細胞點,且未訪問過ans++;bfs(x,y); // 開始對 (x,y) 這個點進行 BFS}cout << ans << endl;return 0;
}

B3626 跳躍機器人

題面

題目描述

地上有一排格子,共?n?個位置。機器貓站在第一個格子上,需要取第?n?個格子里的東西。

機器貓當然不愿意自己跑過去,所以機器貓從口袋里掏出了一個機器人!這個機器人的行動遵循下面的規則:

  • 初始時,機器人位于?1 號格子
  • 若機器人目前在?x?格子,那么它可以跳躍到 x?1,x+1,2x?里的一個格子(不允許跳出界)

問機器人最少需要多少次跳躍,才能到達?n?號格子。

輸入格式

僅一行,一個正整數,表示?n。

輸出格式

僅一行,一個正整數,表示最少跳躍次數。

輸入輸出樣例

輸入 #1

30

輸出 #1

6

輸入 #2

50

輸出 #2

7

輸入 #3

64

輸出 #3

6

輸入 #4

63

輸出 #4

8

說明/提示

樣例解釋

第一組樣例:
1→2→4→8→16→15→301→2→4→8→16→15→30

第二組樣例:
1→2→3→6→12→24→25→501→2→3→6→12→24→25→50

第三組樣例:
1→2→4→8→16→32→641→2→4→8→16→32→64

第四組樣例:
1→2→4→8→16→32→31→62→631→2→4→8→16→32→31→62→63

請注意在本組樣例中,63?不能通過?64?1 得到,因為格子總數為?63,沒有第?64?個格子。

題解

代碼

#include <bits/stdc++.h>
using namespace std;
struct Pos {int x, cost;Pos(int ax = 0, int acost = 0) {x = ax, cost = acost;}
};
int n;
bool vis[1000005];
void bfs() {int x=1, cost=0;queue <Pos> q;q.push(Pos(x,cost)); while(!q.empty()) {Pos now = q.front();q.pop();int x = now.x, cost = now.cost;if(x<1||x>n) // 處理越界,如果 x 不在 [1,n] 范圍內continue;           if(vis[x]) // 用 vis 數組判斷重復continue; vis[x] = 1; // 用 vis 數組標記這個數字被訪問過if(x == n) {cout << cost << endl;return;}q.push(Pos(x-1, cost+1));q.push(Pos(x+1,cost+1));q.push(Pos(2*x, cost+1));}
}
int main() {cin >> n;bfs();return 0;
} 

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

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

相關文章

localhost:8080 is already in use

報錯原因&#xff1a;本機的8080端口號已經被占用。因為機器的空閑端口號是隨機分配的&#xff0c;而idea默認啟動的端口號是8080,所以是存在這種情況。 對于這個問題&#xff0c;我們只需要重啟idea或者修改項目的啟動端口號即可。 更推薦第二種。對于修改項目啟動端口號&…

Python 程序設計入門(020)—— 循環結構程序設計(1):for 循環

Python 程序設計入門&#xff08;020&#xff09;—— 循環結構程序設計&#xff08;1&#xff09;&#xff1a;for 循環 目錄 Python 程序設計入門&#xff08;020&#xff09;—— 循環結構程序設計&#xff08;1&#xff09;&#xff1a;for 循環一、for 循環的語法二、for …

ZDH-wemock模塊

本次介紹基于版本v5.1.1 目錄 項目源碼 預覽地址 安裝包下載地址 wemock模塊 wemock模塊前端 配置首頁 配置mock wemock服務 下載地址 打包 運行 效果展示 項目源碼 zdh_web: https://github.com/zhaoyachao/zdh_web zdh_mock: https://github.com/zhaoyachao/z…

TCGA數據下載推薦:R語言easyTCGA包

#使用easyTCGA獲取數據 #清空 rm(listls()) gc() # 安裝bioconductor上面的R包 options(BioC_mirror"https://mirrors.tuna.tsinghua.edu.cn/bioconductor") if(!require("BiocManager")) install.packages("BiocManager") if(!require("TC…

怎樣讓音頻速度變慢?請跟隨以下方法進行操作

怎樣讓音頻速度變慢&#xff1f;在會議錄音過程中&#xff0c;經常會遇到主講人語速過快&#xff0c;導致我們無法清晰聽到對方說的內容。如果我們能夠減慢音頻速度&#xff0c;就能更好地記錄對方的講話內容。此外&#xff0c;在聽到快速播放的外語或方言時&#xff0c;我們也…

LA@2@1@線性方程組和簡單矩陣方程有解判定定理

文章目錄 矩陣方程有解判定定理線性方程組有解判定特化:齊次線性方程組有解判定推廣:矩陣方程 A X B AXB AXB有解判定證明推論 矩陣方程有解判定定理 線性方程組有解判定 線性方程組 A x b A\bold{x}\bold{b} Axb有解的充分必要條件是它的系數矩陣A和增廣矩陣 ( A , b ) (A,…

機器人的運動范圍

聲明 該系列文章僅僅展示個人的解題思路和分析過程&#xff0c;并非一定是優質題解&#xff0c;重要的是通過分析和解決問題能讓我們逐漸熟練和成長&#xff0c;從新手到大佬離不開一個磨練的過程&#xff0c;加油&#xff01; 原題鏈接 機器人的運動范圍https://leetcode.c…

高等數學教材重難點題型總結(二)導數與微分

本章重點題目較少&#xff0c;除了*標題頁沒什么特別難的&#xff0c;本帖出于總結性的角度考慮并未囊概全部的*標&#xff0c;最后會出一期*標題的全部內容整理&#xff0c;在攻克重難點的基礎上更上一層樓。 1.根據定義求某點處的導數值 2.通過定義證明導數 3.左右導數的相關…

【數據庫】P4 過濾數據 WHERE

過濾數據 WHERE 簡介WHERE 子句操作符檢測單個值案例范圍值檢查 BETWEEN AND空值檢查 NULL 簡介 數據庫表一般包含大量的數據&#xff0c;很少需要檢索表中的所有行。我們只檢索所需數據需要指定搜索條件(search criteria)&#xff0c;搜索條件也稱為過濾條件(filter conditio…

完全備份、增量備份、差異備份、binlog日志

Top NSD DBA DAY06 案例1&#xff1a;完全備份與恢復案例2&#xff1a;增量備份與恢復案例3&#xff1a;差異備份與恢復案例4&#xff1a;binlog日志 1 案例1&#xff1a;完全備份與恢復 1.1 問題 練習物理備份與恢復練習mysqldump備份與恢復 1.2 方案 在數據庫服務器192…

問AI一個嚴肅的問題

chatgpt的問世再一次掀起了AI的浪潮&#xff0c;其實我一直在想&#xff0c;AI和人類的關系未來會怎樣發展&#xff0c;我們未來會怎樣和AI相處&#xff0c;AI真的會完全取代人類嗎&#xff0c;帶著這個問題&#xff0c;我問了下chatgpt&#xff0c;看一看它是怎么看待這個問題…

Modbus工業RFID設備在自動化生產線中的應用

傳統半自動化生產線在運作的過程&#xff0c;因為技工的熟練程度&#xff0c;專業素養的不同&#xff0c;在制造過程中過多的人為干預&#xff0c;工廠將很難對每條生產線的產能進行標準化管理和優化。如果半自動化生產線系統是通過前道工序的作業結果和檢測結果來決定產品在下…

react實現模擬彈框遮罩的自定義hook

需求描述 點擊按鈕用于檢測鼠標是否命中按鈕 代碼實現 import React from react; import {useState, useEffect, useRef} from react;// 封裝一個hook用來檢測當前點擊事件是否在某個元素之外 function useClickOutSide(ref,cb) {useEffect(()>{const handleClickOutside…

JMeter接口自動化測試實例—JMeter引用javaScript

Jmeter提供了JSR223 PreProcessor前置處理器&#xff0c;通過該工具融合了Java 8 Nashorn 腳本引擎&#xff0c;可以執行js腳本以便對腳本進行前置處理。其中比較典型的應用就是通過執行js腳本對前端數據進行rsa加密&#xff0c;如登錄密碼加密。但在這里我就簡單的應用javaScr…

PyTorch翻譯官網教程-NLP FROM SCRATCH: GENERATING NAMES WITH A CHARACTER-LEVEL RNN

官網鏈接 NLP From Scratch: Generating Names with a Character-Level RNN — PyTorch Tutorials 2.0.1cu117 documentation 使用字符級RNN生成名字 這是我們關于“NLP From Scratch”的三篇教程中的第二篇。在第一個教程中</intermediate/char_rnn_classification_tutor…

ChatGPT爆火,會給教育帶來什么樣的影響或者沖擊?

近來&#xff0c;人工智能聊天機器人ChatGPT連上熱搜&#xff0c;火爆全網。ChatGPT擁有強大的信息整合能力、自然語言處理能力&#xff0c;可謂是“上知天文&#xff0c;下知地理”&#xff0c;而且還能根據要求進行聊天、撰寫文章等。 ChatGPT一經推出&#xff0c;便迅速在社…

stop job is running for Advanced key-value store

今天虛擬機磁盤撐滿了&#xff0c;本來還能湊合運行&#xff0c;結果重啟了下&#xff0c;就報了這個 stop job is running for Advanced key-value store (1min 59s / no limit) 解決方式很簡單&#xff0c; 1、虛擬機關電源&#xff0c;任務管理器&#xff0c;關閉VM&#x…

OpenCV-Python中的圖像處理-圖像直方圖

OpenCV-Python中的圖像處理-圖像直方圖 圖像直方圖統計直方圖繪制直方圖Matplotlib繪制灰度直方圖Matplotlib繪制RGB直方圖 使用掩膜統計直方圖直方圖均衡化Numpy圖像直方圖均衡化OpenCV中的直方圖均衡化CLAHE 有限對比適應性直方圖均衡化 2D直方圖OpenCV中的2D直方圖Numpy中2D…

當Visual Studio遇到 “當前不會命中斷點.還沒有為該文檔加載任何符號“的情況

1.配置項目調試路徑&#xff1a; 2.問題解決方案&#xff1a; VS配置調試路徑不是默認路徑時&#xff0c;需要看生成的文件是否在配置路徑內&#xff0c;如果不在的話&#xff0c;可能發生"當前不會命中斷點.還沒有為該文檔加載任何符號"的情況&#xff1b; 右鍵項…

Kotlin語法

整理關鍵語法列表如下&#xff1a; https://developer.android.com/kotlin/interop?hlzh-cn官方指導鏈接 語法形式 說明 println("count ${countnum}")字符串里取值運算 val count 2 var sum 0 類型自動推導 val 定義只讀變量&#xff0c;優先 var定義可變變量…