木块问题,紫书UVa101

矫情吗;* 2022-05-18 04:59 246阅读 0赞

//输/、入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置。现对这些木块进行操作,操作分为四种。
//1、move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;
//2、move a over b:把a上的木块放回各自的原位,再把a发到含b的堆上;
//3、pile a onto b:把b上的木块放回各自的原位,再把a连同a上的木块移到b上;
//4、pile a over b:把a连同a上木块移到含b的堆上。
//当输入quit时,结束操作并输出0~n-1的位置上的木块情况

  1. //vector的使用
  2. #include<cstdio>
  3. #include<iostream>
  4. #include<algorithm>
  5. #include<string>
  6. #include<vector>//vector是一个使用栈的数组
  7. using namespace std;
  8. const int MAXN = 30;
  9. int n;
  10. vector<int> pile[MAXN];
  11. void find_x(int a,int &pa,int &ka){
  12. for(pa=0;pa<n;pa++)
  13. for(ka=0,ka<pile[pa].size();ka++){
  14. if(a==pile[pa][ka])return;
  15. }
  16. void clear_up(int a,int pa,int ka){
  17. for(int i=ka+1,i<pile[pa].size();i++){
  18. int b=pile[pa][i];
  19. pile[b].push_back(b);
  20. }
  21. pile[pa].resize(ka+1);
  22. }
  23. void moveon(int a;int ka,int b )
  24. {
  25. for(int i=ka;i<pile[a].size();i++)
  26. pile[b].push_back(pile[a][ka]);
  27. pile[a].resize(ka);
  28. }
  29. int main()
  30. {
  31. int pa,pb,ka,kb,a,b;
  32. string s1,s2;
  33. cin>>n;
  34. for(int i=0;i<n;i++) pile[i].push_back(i);d
  35. while(cin>>s1>>a>>s2>>b){
  36. find_x(a,pa,ka);
  37. find_x(b,pb,kb);
  38. if(pa==pb)continue;
  39. if(s2=="onto") clear_up(pb,hb);
  40. if(s1=="move") clear_up(pa,ha);
  41. move_on(pa,ka,pb);
  42. }
  43. for(int i=0;i<n;i++){
  44. printf("%d:",i);
  45. for(int j=0;j<pile[i].size();j++)
  46. printf("%d ",pile[i][j]);
  47. puts(" ");
  48. }
  49. return 0;
  50. }

发表评论

表情:
评论列表 (有 0 条评论,246人围观)

还没有评论,来说两句吧...

相关阅读