• STL~vector


    #include<cstdio>
    #include<string>
    #include<vector>
    #include<iostream>
    using namespace std;
    const int maxn = 30;
    int n ;
    vector<int> pile[maxn];
    //找木块A所在的pile 和height 以引用的形式返回
    void find_block(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 ;

    }
    //把P堆高度为H的木块上方所有木块移回
    void clear_above(int p,int h)//p堆H高度以上的木块放回原位
    {
    for(int i=h+1; i<pile[p].size(); i++)
    {
    int b=pile[p][i];//标记移动的木板为B
    pile[b].push_back(b);//木块B放回原位 puch_back (元素不是位置)
    }
    pile[p].resize(h+1);//pile只应保留h+1的元素
    }
    //把P堆高度为H的木块上方所有木块移冻到p2堆得顶部
    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]);
    printf(" ");
    }
    }

    int main ()
    {
    int a,b;
    cin>>n;
    string s1,s2;
    for(int i=0; i<n; i++)
    pile[i].push_back(i);
    while(cin>>s1)
    { if(s1=="quit")break;
    cin>>a>>s2>>b;
    int pa,ha,pb,hb;
    find_block(a,pa,ha);
    find_block(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;
    }

  • 相关阅读:
    移动端注意
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/sxy-798013203/p/5184635.html
Copyright © 2020-2023  润新知