2、STL之vector

例题:

木块问题-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;
}
发布了45 篇原创文章 · 获赞 0 · 访问量 1010

猜你喜欢

转载自blog.csdn.net/jokerxsy/article/details/104126405
今日推荐