uva101---vector 的使用

code:

/*
vector 使用;不定长数组,类似于链表   
             vector<T>a ---- a.size() //a的大小
			            ---- a.resize() //改变a的大小
			            ---- a.pusb_back() //将向尾部添加元素 
						---- a.pop_back()  // 删除最后一个元素
						---- a.clear()   //清空
						---- a.empty()  // 测试是否为空 
//vector 本质上是一个指针数组
*/
/*
思路: move a onto b  将a,b上方木块归位,然后将a移到b上
       move a over b  将a 上方木块归位,然后将a移到b上方
	   pile a onto b  将b上方木块归位,将a的堆放入b上面 
       pile a over b  将a的堆移到b的堆上面 
       
       抽取共性,然后写一个函数,直接调用ok
	   首先  归位  -----需要找到木块所在的位置 
*/ 
#include<cstdio>
#include <vector>
#include <string>
#include <iostream>

using namespace std;

const int maxn = 30; 

vector<int> pile[maxn];//每个pile都是一个vector
 
int n;

void find_block(int a,int & p,int & h){  //找到木块a所在的的堆还有其高度 ---引用的使用 
	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){//将木块p,其高度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);//pile 只应该留下0-h个元素 
} 

void pile_onto(int p,int h,int p2){//将第p堆高度为h的木块移动到p2堆的顶部 
        for(int i = h;i<pile[p].size();i++)
		     pile[p2].push_back(pile[p][i]); //包括pile[p].h 
		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("\n");   
  	}
}
int main(){
       int a,b;
	   string s1,s2;
	   	      cin >> n;
	   	      for(int i =0;i<n;i++) pile[i].push_back(i);//初始化
			  while(cin >> s1 && s1 != "quit" &&cin>> a >> s2 >> b){
                    int pa,pb,ha,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; 
} 	

 

  

posted on 2014-12-09 00:03  lzm420241  阅读(157)  评论(0)    收藏  举报

导航