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 }

浙公网安备 33010602011771号