ロボットがグリッド内の特定のセルに到達するために必要なジャンプの回数を見つけるための C++ プログラム
h x w のグリッドがあるとします。グリッドは「initGrid」と呼ばれる 2 次元配列で表され、グリッド内の各セルは「#」または「.」で表されます。 「#」はグリッド内に障害物があることを意味し、「.」はそのセル上にパスがあることを意味します。ここで、ロボットがグリッド上の行番号 x と列番号 y のセル「c」に配置されます。ロボットは行番号 p、列番号 q のセル「d」から別のセルに移動する必要があります。セル座標 c と d は両方とも整数のペアとして指定されます。これで、ロボットは次のようにセル間を移動できるようになります:
ロボットが移動したいセルが現在のセルに垂直または水平に隣接して配置されている場合、ロボットはあるセルから別のセルまで直接歩くことができます。
ロボットは、現在の位置を中心とする 5x5 のエリア内の任意のセルにジャンプできます。
ロボットは、障害物を含まないグリッド内の別のセルにのみ移動できます。ロボットもグリッドから離れることはできません。
ロボットがターゲットに到達するのに必要なホップ数を調べる必要があります。
つまり、入力が h = 4、w = 4、c = {2, 1}、d = {4, 4}、initGrid = {"#...", ".##.", " ...#", "..#."} の場合、出力は 1 になります。ロボットは目的地に到達するために 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 '.', 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] == '.') { 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]) << '\n'; } int main() { h = 4, w = 4; pair<int,int> c = {2, 1}, d = {4, 4}; string initGrid[] = {"#...", ".##.", "...#", "..#."}; solve(c, d, initGrid); return 0; }
Input
4, 4, {2, 1}, {4, 4}, {"#...", ".##.", "...#", "..#."}
出力
1
以上がロボットがグリッド内の特定のセルに到達するために必要なジャンプの回数を見つけるための C++ プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









人型ロボット「アメカ」が第二世代にバージョンアップ!最近、世界移動通信会議 MWC2024 に、世界最先端のロボット Ameca が再び登場しました。会場周辺ではアメカに多くの観客が集まった。 GPT-4 の恩恵により、Ameca はさまざまな問題にリアルタイムで対応できます。 「ダンスをしましょう。」感情があるかどうか尋ねると、アメカさんは非常に本物そっくりの一連の表情で答えました。ほんの数日前、Ameca を支援する英国のロボット企業である EngineeredArts は、チームの最新の開発結果をデモンストレーションしたばかりです。ビデオでは、ロボット Ameca は視覚機能を備えており、部屋全体と特定のオブジェクトを見て説明することができます。最も驚くべきことは、彼女は次のこともできるということです。

1. はじめに 現在、主要なオブジェクト検出器は、深層 CNN のバックボーン分類器ネットワークを再利用した 2 段階または 1 段階のネットワークです。 YOLOv3 は、入力画像を受け取り、それを等しいサイズのグリッド マトリックスに分割する、よく知られた最先端の 1 段階検出器の 1 つです。ターゲット中心を持つグリッド セルは、特定のターゲットの検出を担当します。今日私が共有するのは、各ターゲットに複数のグリッドを割り当てて正確なタイトフィット境界ボックス予測を実現する新しい数学的手法です。研究者らはまた、ターゲット検出のための効果的なオフラインのコピー&ペーストデータの強化も提案しました。新しく提案された方法は、現在の最先端の物体検出器の一部よりも大幅に性能が優れており、より優れたパフォーマンスが期待されます。 2. バックグラウンドターゲット検出ネットワークは、次のように設計されています。

産業オートメーション技術の分野では、人工知能 (AI) と Nvidia という無視できない 2 つの最近のホットスポットがあります。元のコンテンツの意味を変更したり、コンテンツを微調整したり、コンテンツを書き換えたり、続行しないでください。「それだけでなく、Nvidia はオリジナルのグラフィックス プロセッシング ユニット (GPU) に限定されていないため、この 2 つは密接に関連しています。」このテクノロジーはデジタル ツインの分野にまで広がり、新たな AI テクノロジーと密接に関係しています。「最近、NVIDIA は、Aveva、Rockwell Automation、Siemens などの大手産業オートメーション企業を含む多くの産業企業と提携に至りました。シュナイダーエレクトリック、Teradyne Robotics とその MiR および Universal Robots 企業も含まれます。最近、Nvidiahascoll

Machine Power Report 編集者: Wu Xin 国内版の人型ロボット + 大型模型チームは、衣服を折りたたむなどの複雑で柔軟な素材の操作タスクを初めて完了しました。 OpenAIのマルチモーダル大規模モデルを統合したFigure01の公開により、国内同業者の関連動向が注目を集めている。つい昨日、中国の「ヒューマノイドロボットのナンバーワン株」であるUBTECHは、Baidu Wenxinの大型モデルと深く統合されたヒューマノイドロボットWalkerSの最初のデモを公開し、いくつかの興味深い新機能を示した。 Baidu Wenxin の大規模モデル機能の恩恵を受けた WalkerS は次のようになります。 Figure01 と同様に、WalkerS は動き回るのではなく、机の後ろに立って一連のタスクを完了します。人間の命令に従って服をたたむことができる

今週、OpenAI、Microsoft、Bezos、Nvidiaが投資するロボット企業FigureAIは、7億ドル近くの資金調達を受け、来年中に自立歩行できる人型ロボットを開発する計画であると発表した。そしてテスラのオプティマスプライムには繰り返し良い知らせが届いている。今年が人型ロボットが爆発的に普及する年になることを疑う人はいないだろう。カナダに拠点を置くロボット企業 SanctuaryAI は、最近新しい人型ロボット Phoenix をリリースしました。当局者らは、多くのタスクを人間と同じ速度で自律的に完了できると主張している。人間のスピードでタスクを自律的に完了できる世界初のロボットである Pheonix は、各オブジェクトを優しくつかみ、動かし、左右にエレガントに配置することができます。自律的に物体を識別できる

以下の 10 種類の人型ロボットが私たちの未来を形作ります。 1. ASIMO: ホンダが開発した ASIMO は、最もよく知られている人型ロボットの 1 つです。身長 4 フィート、体重 119 ポンドの ASIMO には、高度なセンサーと人工知能機能が装備されており、複雑な環境をナビゲートし、人間と対話することができます。 ASIMO は多用途性を備えているため、障害を持つ人々の支援からイベントでのプレゼンテーションまで、さまざまなタスクに適しています。 2. Pepper: ソフトバンクロボティクスによって作成された Pepper は、人間の社会的パートナーになることを目指しています。表情豊かな顔と感情を認識する能力を備えた Pepper は、会話に参加したり、小売現場で手助けしたり、教育サポートを提供したりすることもできます。コショウ

掃除ロボットやモップ拭きロボットは、近年消費者の間で最も人気のあるスマート家電製品の 1 つです。操作の利便性、あるいは操作の必要がないことで、怠け者は手を解放し、消費者は日常の家事から「解放」され、好きなことにもっと時間を費やすことができるようになり、生活の質が向上します。この流行に乗って、市場に出回っているほぼすべての家電ブランドが独自の掃除ロボットや拭き掃除ロボットを製造しており、掃除ロボット市場全体が非常に活発になっています。しかし、市場の急速な拡大は必然的に隠れた危険をもたらします。多くのメーカーがより多くの市場シェアを急速に占有するために機械の海戦術を使用し、その結果、アップグレードポイントのない多くの新製品が生まれるとも言われています。まさに「マトリョーシカ」モデルです。ただし、すべての掃除ロボットやモップロボットがそうであるわけではありません。

瞬く間に、ロボットは魔法を使えるようになったのでしょうか?最初にテーブルの上の水スプーンを取り上げ、中には何も入っていないことを観客に証明したのが見られました。次に、卵のような物体を手に置き、水スプーンをテーブルに戻し、が「呪文を唱え」始めました… …再び水スプーンを拾ったそのとき、奇跡が起こりました。元々入っていた卵が消えて、飛び出してきたのがバスケットボールに… もう一度連続動作を見てみましょう: △ このアニメーションは一連の動作を2倍速で表示しており、スムーズに流れています。ビデオを 0.5 倍速で繰り返し再生すると、うまくいくでしょうか? 最後に、手の速度がもっと速ければ、敵から隠すことができるかもしれないという手がかりを発見しました。一部のネチズンは、ロボットの魔法のスキルが自分たちのものよりもさらに高いと嘆いていました。マグは私たちのためにこの魔法を実行してくれたのです。
