UVa 101 The Blocks Problem 数据结构专题

阅读更多

FILE 101-The Blocks Problem 67864
19.16%
14194
题目链接:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=37


题目类型: 数据结构, 二叉树


题意:

有N个位置, 编号为 0~N-1, 初始下,各个位置上放置这和位置编号相同的砖块,即砖块1,砖块2……砖块N-1。 然后有四种命令操作方式:

1.moveaontob :把砖a移动到砖b上面,如果a和b上面都有砖块,要先把它们放回原来位置。

2.move a over b: 把a移动到有b的“砖堆”上面,移动前需要把a上面的砖块都恢复到原位置,b的堆保持不变。

3.pileaontob:把a之上的(包括a)搬到b之上,要先把b上面的砖放回到原来位置

4.pileaoverb: 直接把a之上的(包括a)搬到b所在的“砖堆”上。

5.quit: 结束命令。


解体思路: 初刚看到时,想用stack模拟,但是这样操作会比较多,可能会TLE。 于是自己模拟写了类似栈的类,但是可以随机存储。 STL确实用起来比较方便,但是很不灵活。


#include
#include
#include
using namespace std;

int n, block_a, block_b, pos_a, pos_b;
string command1,command2;

class Pile{
public:
    Pile(){ index = 0; }
    void init_set(int a){
        index=0;
        arr[index++] = a;
    }
    int top(){
        return arr[index-1];
    }
    void add(int a){
        arr[index++] = a;
    }
    bool is_empty(){
        if(index==0)
            return true;
        return false;
    }
    int find(int a){
       for(int i=0; i> command1 >> block_a >> command2 >> block_b){
        if(command1=="quit") break;
        solve();
    }
    output();
    return 0;
}


—— 生命的意义,在于赋予它意义。

原创 http://blog.csdn.net/shuangde800 By D_Double






你可能感兴趣的:(UVa 101 The Blocks Problem 数据结构专题)