不定長陣列 vector及木塊問題

2021-09-25 09:50:04 字數 2194 閱讀 3181

基本操作:

1 #include< vector >

2 例如vector< int > a;

3 a.size()讀取大小

a.resize()改變大小

a.push_back()向尾部新增元素

a.pop_back()刪除最後乙個元素

a.clear()清空

a.empty()判斷是否為空

木塊問題:

背景在電腦科學中的很多地方都會使用簡單,抽象的方法來做分析和實驗驗究。比如在早期的規劃學和機械人學的人工智慧研究就利用乙個積木世界,讓機械臂執行操作積木的任務。

在這個問題中,你將在確定的規則和約束條件下構建乙個簡單的積木世界。這不是讓你來研究怎樣達到某種狀態,而是編寫乙個「機械臂程式」來響應有限的命令集。問題問題就是分析一系列的命令,告訴機械臂如何操縱放在乙個平台上的積木。最初平台上有n個積木(編號由0到n - 1),對於任意的0 ≤ i < n - 1,積木bi都與bi + 1相臨,圖示如下:

機械臂操作積木的有效指令列舉如下:

*move a onto b

a和b都是積木的編號,先將a和b上面所有的積木都放回原處,再將a放在b上。

*move a over b

a和b都是積木的編號,先將a上面所有的積木放回原處,再將a放在b上。(b上原有積木不動)

*pile a onto b

a和b都是積木的編號,將a和其上面所有的積極組成的一摞整體移動到b上。在移動前要先將b上面所有的積極都放回原處。移動的一摞積木要保持原來的順序不變。

*pile a over b

a和b都是積木的編號,將a和其上面所有的積極組成的一摞整體移動到b所在一摞積木的最上面乙個積木上。移動的一摞積木要保持原來的順序不變。

*quit

結束積木世界的操縱。

當a = b或a和b處在同一摞時,任何企圖操作a和b的命令都是非法的。所有非法的命令都要忽略,且不能對當前積木的狀態產生作用。輸入輸入由1個整數n開始開始,該整數獨佔一行,表示積木世界中的積木數量。你可以假定0 < n < 25。

從積木數量值的下一行開始是一系列的命令,每條命令獨佔一行。你的程式要處理所有的命令直到輸入退出命令。

你可以假定所有的命令都按上文所示的格式給出。不會出現語法錯誤的命令。

輸出以積木世界的最終狀態作為輸出。每乙個原始積木的位置i(0 ≤ i < n,n為積木數量)後面都要緊跟乙個冒號。如果至少有乙個積木在該位置上,冒號後面都要緊跟乙個空格,然後是該位置上所有積木編號的序列。每2個積木的編號之間以乙個空格隔開。行尾不能出現多餘的空格。

每個積木位置獨佔一行(即第一行輸入的n,對應輸出n行資料)。

樣例輸入10

move 9 onto 1

move 8 over 1

move 7 over 1

move 6 over 1

pile 8 over 6

pile 8 over 5

move 2 over 1

move 4 over 9

quit樣例輸出0: 0

1: 1 9 2 4

2:3: 3

4:5: 5 8 7 6

6:7:

8:9:

咳,做題前仔細分析一下,這題想讓我們幹什麼(想要我命)

題目中有move,pile,onto,over,有onto時,b上的木塊歸位,有move時,a上面的木塊歸位,

然後把a及a上面(如果有的話)的木塊摞到b上面。所以我們需要找到木塊a的pile和height,

還需要乙個歸位函式,再來乙個移動函式。

先把該定義的都鋪出來

#include< cstdio >

#include< string >

#include< vector >

#include< iostream >

using namespace std;

const int maxn=30;

int n;

vector< int > pile[maxn];

然後是找到a所在的位置,並記錄下其位置

void findph(int a,int &p,int &h)

if(s1=="move")

h_move(pa,ha,pb);//把pa中高度為ha及其上方的木塊移動到pb上

}print();

return 0;

}

不定長陣列 vector

使用需要包含標頭檔案 include vector是乙個模板類,所以需要用vectora或者vectorb這種方式宣告。vector的常用操作 int len a.size 返回vector長度 a.resize 100 把a長度變為100 a.push back 10 把10新增到尾部 a.pop...

不定長陣列 vector

vector是乙個不定長陣列模板類,所以需要用vectora或者vectorb這樣的方式來進行宣告乙個vector。vector是乙個類似於int a的整數陣列,而vector就是乙個類似於string a的字串陣列。使用vector時要加 include標頭檔案 常用的vector陣列的方法有 i...

不定長陣列 vector

1.vector 在使用它時,需要包含標頭檔案vector,include.vector 容器與陣列相比其優點在於它能夠根據需要隨時 自動調整自身的大小以便容下所要放入的元素,提供了許 多的方法來對自身進行操作.2.初始化 vectora 宣告乙個int型向量a vectora 10 宣告乙個初始大...