目錄
Example
輸入
輸出
首頁 後端開發 C++ C++程式用來找出機器人在網格中到達特定單元所需的跳躍次數

C++程式用來找出機器人在網格中到達特定單元所需的跳躍次數

Sep 17, 2023 pm 07:17 PM
機器人 網格 跳躍次數

C++程式用來找出機器人在網格中到達特定單元所需的跳躍次數

假設我們有一個 h x w 的網格。網格在一個名為 'initGrid' 的二維數組中表示,其中網格中的每個單元格都以 '#' 或 '.' 表示。 '#' 表示網格中有障礙物,'.' 表示該單元格上有一條路徑。現在,一個機器人被放置在網格上的一個單元格 'c' 上,該單元格具有行號 x 和列號 y。機器人必須從一個具有行號 p 和列號 q 的單元格 'd' 移動到另一個單元格。單元格座標 c 和 d 都以整數對的形式給出。現在,機器人可以按以下方式從一個單元格移動到另一個單元格:

  • 如果機器人想要移動到的單元格位於目前單元格的垂直或水平相鄰位置,機器人可以直接從一個單元格走到另一個單元格。

  • 機器人可以跳到以其目前位置為中心的 5x5 區域中的任何單元格。

  • 機器人只能移動到不包含障礙物的網格中的另一個單元格。機器人也不能離開網格。

我們需要找出機器人到達目標所需的跳數。

因此,若輸入為h = 4,w = 4,c = {2, 1},d = {4, 4},initGrid = {"#...", ".##.", " ...#", "..#."},那麼輸出將為1。機器人只需要一次跳躍就可以到達目的地。

為了解決這個問題,我們將按照以下步驟進行:

N:= 100
Define intger pairs s and t.
Define an array grid of size: N.
Define an array dst of size: N x N.
Define a struct node that contains integer values a, b, and e.
Define a function check(), this will take a, b,
   return a >= 0 AND a < h AND b >= 0 AND b < w
Define a function bfs(), this will take a, b,
   for initialize i := 0, when i < h, update (increase i by 1), do:
   for initialize j := 0, when j < w, update (increase j by 1), do:
      dst[i, j] := infinity
   dst[a, b] := 0
   Define one deque doubleq
   Insert a node containing values {a, b, and dst[a, b]} at the end of doubleq
   while (not doubleq is empty), do:
      nd := first element of doubleq
      if e value of nd > dst[a value of nd, b value of nd], then:
         Ignore the following part, skip to the next iteration
   for initialize diffx := -2, when diffx <= 2, update (increase diffx by 1), do:
   for initialize diffy := -2, when diffy <= 2, update (increase diffy by 1), do:
      tm := |diffx + |diffy||
      nx := a value of nd + diffx, ny = b value of nd + diffy
      if check(nx, ny) and grid[nx, ny] is same as &#39;.&#39;, then:
         w := (if tm > 1, then 1, otherwise 0)
         if dst[a value of nd, b value of nd] + w < dst[nx, ny], then:
            dst[nx, ny] := dst[a value of nd, b value of nd] + w
            if w is same as 0, then:
               insert node containing values ({nx, ny, dst[nx, ny]}) at the beginning of doubleq.
          Otherwise
insert node containing values ({nx, ny, dst[nx, ny]}) at the end of doubleq.
s := c
t := d
(decrease first value of s by 1)
(decrease second value of s by 1)
(decrease first value of t by 1)
(decrease second value of t by 1)
for initialize i := 0, when i < h, update (increase i by 1), do:
grid[i] := initGrid[i]
bfs(first value of s, second value of s)
print(if dst[first value of t, second value of t] is same as infinity, then -1, otherwise dst[first value of t, second value of t])
登入後複製

Example

#讓我們看下面的實作以獲得更好的理解−

#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
#define N 100
int h, w;
pair<int, int> s, t;
string grid[N];
int dst[N][N];
struct node {
   int a, b, e;
};
bool check(int a, int b) {
   return a >= 0 && a < h && b >= 0 && b < w;
}
void bfs(int a, int b) {
   for (int i = 0; i < h; i++) {
      for (int j = 0; j < w; j++)
         dst[i][j] = INF;
   }
   dst[a][b] = 0;
   deque<node> doubleq;
   doubleq.push_back({a, b, dst[a][b]});

   while (!doubleq.empty()) {
      node nd = doubleq.front();
      doubleq.pop_front();
      if (nd.e > dst[nd.a][nd.b])
         continue;
      for (int diffx = -2; diffx <= 2; diffx++) {
         for (int diffy = -2; diffy <= 2; diffy++) {
            int tm = abs(diffx) + abs(diffy);
            int nx = nd.a + diffx, ny = nd.b + diffy;
            if (check(nx, ny) && grid[nx][ny] == &#39;.&#39;) {
               int w = (tm > 1) ? 1 : 0;
               if (dst[nd.a][nd.b] + w < dst[nx][ny]) {
                  dst[nx][ny] = dst[nd.a][nd.b] + w;
                  if (w == 0)
                     doubleq.push_front({nx, ny, dst[nx][ny]});
                  else
                     doubleq.push_back({nx, ny, dst[nx][ny]});
               }
            }
         }
      }
   }
}
void solve(pair<int,int> c, pair<int, int> d, string initGrid[]){
   s = c;
   t = d;
   s.first--, s.second--, t.first--, t.second--;
   for(int i = 0; i < h; i++)
      grid[i] = initGrid[i];
   bfs(s.first, s.second);
   cout << (dst[t.first][t.second] == INF ? -1 :
      dst[t.first][t.second]) << &#39;\n&#39;;
}
int main() {
   h = 4, w = 4;
   pair<int,int> c = {2, 1}, d = {4, 4};
   string initGrid[] = {"#...", ".##.", "...#", "..#."};
   solve(c, d, initGrid);
   return 0;
}
登入後複製

輸入

4, 4, {2, 1}, {4, 4}, {"#...", ".##.", "...#", "..#."}
登入後複製

輸出

1
登入後複製

以上是C++程式用來找出機器人在網格中到達特定單元所需的跳躍次數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
2 個月不見,人形機器人 Walker S 會摺衣服了 2 個月不見,人形機器人 Walker S 會摺衣服了 Apr 03, 2024 am 08:01 AM

機器之能報道編輯:吳昕國內版的人形機器人+大模型組隊,首次完成疊衣服這類複雜柔性材料的操作任務。隨著融合了OpenAI多模態大模型的Figure01揭開神秘面紗,國內同行的相關進展一直備受關注。就在昨天,國內"人形機器人第一股"優必選發布了人形機器人WalkerS深入融合百度文心大模型後的首個Demo,展示了一些有趣的新功能。現在,得到百度文心大模型能力加持的WalkerS是這個樣子的。和Figure01一樣,WalkerS沒有走動,而是站在桌子後面完成一系列任務。它可以聽從人類的命令,折疊衣物

用於精確目標偵測的多網格冗餘邊界框標註 用於精確目標偵測的多網格冗餘邊界框標註 Jun 01, 2024 pm 09:46 PM

一、前言目前領先的目標偵測器是基於深度CNN的主幹分類器網路重新調整用途的兩級或單級網路。 YOLOv3就是這樣一種眾所周知的最先進的單級檢測器,它接收輸入圖像並將其劃分為大小相等的網格矩陣。具有目標中心的網格單元負責偵測特定目標。今天分享的,就是提出了一種新的數學方法,該方法為每個目標分配多個網格,以實現精確的tight-fit邊界框預測。研究者也提出了一種有效的離線複製貼上資料增強來進行目標偵測。新提出的方法顯著優於一些目前最先進的目標偵測器,並有望獲得更好的效能。二、背景目標偵測網路旨在使用

AI如何使機器人更具自主性和適應性? AI如何使機器人更具自主性和適應性? Jun 03, 2024 pm 07:18 PM

在工業自動化技術領域,最近有兩個熱點很難被忽視:人工智慧(AI)和英偉達(Nvidia)。不要改變原內容的意思,微調內容,重寫內容,不要續寫:「不僅如此,這兩者密切相關,因為英偉達在不僅僅局限於其最開始的圖形處理單元(GPU),正在將其GPU科技擴展到數位孿生領域,同時緊密連接著新興的AI技術。泰瑞達機器人及其MiR和優傲機器人公司。 Recently,Nvidiahascoll

第二代Ameca來了!和觀眾對答如流,臉部表情更逼真,會說幾十種語言 第二代Ameca來了!和觀眾對答如流,臉部表情更逼真,會說幾十種語言 Mar 04, 2024 am 09:10 AM

人形機器人Ameca升級第二代了!最近,在世界行動通訊大會MWC2024上,世界上最先進機器人Ameca又現身了。會場周圍,Ameca引來一大波觀眾。得到GPT-4加持後,Ameca能夠對各種問題做出即時反應。 「來一段舞蹈」。當被問及是否有情感時,Ameca用一系列的面部表情做出回應,看起來非常逼真。就在前幾天,Ameca背後的英國機器人公司EngineeredArts剛剛示範了團隊最新的開發成果。影片中,機器人Ameca具備了視覺能力,能看見並描述房間整個狀況、描述具體物體。最厲害的是,她還能

首個自主完成人類任務機器人出現,五指靈活速度超人,大模型加持虛擬空間訓練 首個自主完成人類任務機器人出現,五指靈活速度超人,大模型加持虛擬空間訓練 Mar 11, 2024 pm 12:10 PM

這週,由OpenAI、微軟、貝佐斯和英偉達投資的機器人公司FigureAI宣布獲得接近7億美元的融資,計劃在未來一年內研發出可獨立行走的人形機器人。而特斯拉的擎天柱也屢屢傳出好消息。沒人懷疑,今年會是人形機器人爆發的一年。一家位於加拿大的機器人公司SanctuaryAI最近發布了一款全新的人形機器人Phoenix。官方號稱它能以和人類一樣的速率自主完成許多工作。世界上第一台能以人類速度自主完成任務的機器人Pheonix可以輕輕地抓取、移動並優雅地將每個物件放置在它的左右兩側。它能夠自主辨識物體的

人形機器人會變魔術了,春晚節目組了解一下 人形機器人會變魔術了,春晚節目組了解一下 Feb 04, 2024 am 09:03 AM

一眨眼的功夫,機器人都已經學會變魔術了?只見它先是拿起桌上的水勺,向觀眾證明了裡面什麼也沒有……然後,它又把手中雞蛋似的物體放了進去,然後把水勺放回桌子上,開始「施法」… …就在它把水勺再次拿起的時候,奇蹟發生了。原先放進去的雞蛋不翼而飛,跳出的東西變成了一個籃球……再來看一遍連貫動作:△此動圖為二倍速一套動作下來如行雲流水,只有把視頻用0.5倍速反复觀看,才終於發現其中的端倪了:如果手速再快一些,大概真的就可以瞞天過海了。有網友感嘆,機器人變魔術的程度比自己還要高:為我們表演這段魔術的,是Mag

雲鯨逍遙001掃拖機器人,長「腦子」了! | 體驗 雲鯨逍遙001掃拖機器人,長「腦子」了! | 體驗 Apr 26, 2024 pm 04:22 PM

近幾年最受消費者歡迎的智慧家電,掃拖機器人可謂是其中之一。它所帶來的操作便利性,甚至是無需操作,讓懶人們釋放了雙手,讓消費者能夠從日常的家務中「解放」出來,也能拿更多的時間花在自己喜歡的事情上,變相提高了生活品質。藉著這股熱潮,市面上幾乎所有的家電產品品牌都在做自己的掃拖機器人,一時間使得整個掃拖機器人市場熱鬧非凡。但市場的快速拓張必然會帶來一個隱患:很多廠商會採用機海戰術的方式快速佔領更多的市場份額,從而導致很多新品並沒有什麼升級點,說它是“套娃”機型也不為過。不過,並不是所有的掃拖機器人都是

塑造未來的十款類人機器人 塑造未來的十款類人機器人 Mar 22, 2024 pm 08:51 PM

以下10款類人機器人正在塑造我們的未來:1、ASIMO:ASIMO由Honda開發,是最知名的人形機器人之一。 ASIMO高4英尺,重119磅,配備先進的感測器和人工智慧功能,使其能夠在複雜的環境中導航並與人類互動。 ASIMO的多功能性使其適用於各種任務,從幫助殘疾人到在活動中進行演示。 2、Pepper:由SoftbankRobotics創建,Pepper旨在成為人類的社交伴侶。憑藉其富有表現力的面孔和識別情緒的能力,Pepper可以參與對話、在零售環境中提供幫助,甚至提供教育支持。 Pepper的

See all articles