例题,照着敲的.基本没变.
#include<cstdio>
#include<vector>
#include<string>
#include<iostream>
#define MAXN 30
using namespace std;
vector<int> pile[MAXN];
int n;
string s1, s2;
void find_pile(int a, int& p, int& h){
for(p = 0; p < n; p++)
for(h = 0; h < pile[p].size(); h++)
if(pile[p][h] == a) return;
}
void clear_above(int p, int h){
for(int i = h + 1; i < pile[p].size(); i++){
int b = pile[p][i];
pile[b].push_back(b);
}
pile[p].resize(h + 1);
}
void pile_onto(int p, int h, int p2) {
for(int i = h; i < pile[p].size() ; i++)
pile[p2].push_back(pile[p][i]);
pile[p].resize(h);
}
void print() {
for(int i = 0; i < n; i++) {
printf("%d:", i);
for(int j = 0; j < pile[i].size(); j++)
printf(" %d", pile[i][j]);
cout << endl;
}
}
int main(){
int a, b;
cin >> n;
for(int i = 0; i < n; i++)
pile[i].push_back(i);
while(cin >> s1 >> a >> s2 >> b){
int pa, pb, ha, hb;
find_pile(a, pa, ha);
find_pile(b, pb, hb);
if(pa == pb) continue;
if(s2 == "onto") clear_above(pb, hb);
if(s1 == "move") clear_above(pa, ha);
pile_onto(pa, ha, pb);
}
print();
return 0;
}
浙公网安备 33010602011771号