101 - The Blocks Problem(书上例题5-2)(未完成)

题意还不太清楚,代码也比较乱,没写完,以后继续吧

move  a onto b时,a的先放回原位了,b上面的也放回原位了,这时如果b上有放回a的,a,b不就不能挨在一起了吗?

  1 #include<cstring>
  2 #include<cstdio>
  3 #include<iostream>
  4 #include<sstream>
  5 #include<algorithm>
  6 #include <vector>
  7 using namespace std;
  8 
  9  int k;
 10 
 11  int pop(int i,int blocks[][],int length[])
 12  {
 13      blocks[]
 14  }
 15  int push(int key,int j,int blocks[][],int length[])
 16  {
 17       blocks[j][length[j]]=key;
 18       length[j]++;
 19  }
 20  int sig_find_before_move(int blocks[][],int length[],int key,int choose)
 21  {
 22      int i,j;
 23      for(i=0;i<k;i++)
 24      {
 25          for(j=0;j<length[i];j++)
 26          {
 27              if(blocks[i][j]==key) break;
 28          }
 29          if(j<length[i]) break;
 30      }
 31 
 32      if(i<k&&choose==0) //0 stands for single
 33      {
 34          int p=length[i]-1;
 35          while(p>j)
 36          {
 37              push(blocks[i][p],blocks[i][p],blocks,length);
 38              length[i]--;
 39              p--;
 40          }
 41      }
 42      if(i<k&&choose==1) //1 stands for pile
 43      {
 44          int p=j;
 45          while(p<length[i])
 46          {
 47              push(blocks[i][p],blocks[i][p],blocks,length);
 48              length[i]--;
 49              p--;
 50          }
 51      }
 52 
 53      else return -1;
 54      return i;
 55  }
 56  
 57 
 58 int main()
 59 {
 60     int m,n;
 61     string str1;
 62     string str2;
 63 
 64     cin>>k;
 65     while((cin>>str1)&&str1.compare("quit")!=0)
 66     {
 67        cin>>m>>str2>>n;
 68 
 69        int a,b;
 70 
 71        int blocks[k][k];
 72        for(int i=0;i<k;i++)
 73         blocks[i][k]=i;
 74 
 75        int length[k];
 76        for(int i=0;i<k;i++)
 77         length[i]=1;
 78 
 79         if(str1=="move")
 80         {
 81          i=find_before_move(blocks,length,m); //the top
 82          a=blocks[i][length[i]-1];
 83          pop(a,blocks,length);
 84         }
 85         else if(str1=="pile")
 86         {
 87 
 88         }
 89 
 90         if(str2=="onto")
 91         {
 92           j=find_before_move(blocks,length,n);
 93           push(a,j,blocks,length);
 94         }
 95         else if(str2=="over")
 96         {
 97 
 98         }
 99     }
100     return 0;
101 }

 

posted @ 2015-12-17 10:43  cherry_yue  阅读(75)  评论(0)    收藏  举报