欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2、STL之vector

程序员文章站 2022-07-12 14:38:02
...

例题:

木块问题-UVA 101

大意:

move a onto b move a over b pile a onto b pile a over b quit
5种不同的指令,实现5种不同的操作。

知识点:

因为木块堆的高度不确定,所以使用vector中的vector结构来存储。
vector就像一个二维数组,只是第一维的大小是固定的,第二维的大小不固定。

C++ Vector 使用说明(转载自无痕眼泪 )

const int maxn = 25;
vector<int> pile[maxn];
pile[i].clear();
pile[i].resize(h);
pile[i].push_back();
pile[i].pop_back();
pile[i].empty();

代码:

#include<iostream>
#include<vector>
#include<string>
#include<sstream>
using namespace std;
//move a onto b;move a over b;pile a onto b;pile a over b;
const int maxn=25;
vector<int> pile[maxn];
int n;
void find_block(int& pa,int& ha,int a){
 for(pa = 0;pa<n;pa++){
  for(ha = 0;ha<pile[pa].size();ha++){
   if(pile[pa][ha] == a){
    return;
   }
  }
 }
}
void clear_above(int p,int h){
 for(int i = h+1;i < pile[p].size();i++) pile[pile[p][i]].push_back(pile[p][i]);
 pile[p].resize(h+1);
}
void move_blocks(int p1,int h1,int p2){
 for(int i = h1;i<pile[p1].size();i++){
  pile[p2].push_back(pile[p1][i]);
 }
 pile[p1].resize(h1);
}
void print(){
 for(int i = 0;i<n;i++){
  cout << i << ":";
  for(int j = 0;j<pile[i].size();j++){
   cout << " " << pile[i][j];
  }
  cout << endl;
 }
}
int main(){
 cin>>n;
 for(int i = 0;i<n;i++){  // 创建向量
  pile[i].push_back(i);
 }
 string s1,s2;
 int a,b;
 while(cin>>s1){
  if(s1 == "quit") break;
  cin >> a >> s2 >> b;
  int pa,pb,ha,hb;
  find_block(pa,ha,a);
  find_block(pb,hb,b);
  if(pa==pb) continue;
  if(s1 == "move"){
   clear_above(pa,ha);
  }
  if(s2 == "onto"){
   clear_above(pb,hb);
  }
  move_blocks(pa,ha,pb);
 }
 print();
 return 0;
}
相关标签: # STL c++ stl

上一篇: 3、STL之set

下一篇: STL之模板