1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <algorithm> 5 #include <vector> 6 7 using namespace std; 8 9 vector<int> arr[30]; 10 int x,y,n; 11 void find_blocks(int w) 12 { 13 for(x=0;x<n;x++) 14 { 15 for(y=0;y<arr[x].size();y++) 16 { 17 if(arr[x][y]==w) 18 return ; 19 } 20 } 21 } 22 23 void guiwei(int w) 24 { 25 find_blocks(w); 26 for(int i=arr[x].size()-1;i>y;i--) 27 { 28 arr[arr[x][i]].push_back(arr[x][i]); 29 arr[x].pop_back(); 30 } 31 } 32 33 void yidong(int w,int r) 34 { 35 find_blocks(r); 36 int tmpx=x; 37 find_blocks(w); 38 for(int i=y;i<arr[x].size();i++) 39 { 40 arr[tmpx].push_back(arr[x][i]); 41 } 42 int tt=arr[x].size(); 43 for(int i=y;i<tt;i++) 44 { 45 arr[x].pop_back(); 46 } 47 } 48 49 int main() 50 { 51 cin>>n; 52 for(int i=0;i<n;i++) 53 { 54 arr[i].push_back(i); 55 } 56 string a,c; 57 int b,d; 58 while(cin>>a&&a!="quit") 59 { 60 cin>>b>>c>>d; 61 find_blocks(b); 62 int tmpx=x; 63 find_blocks(d); 64 if(x==tmpx) 65 continue; 66 if(a=="move") 67 { 68 guiwei(b); 69 int v=arr[x][y]; 70 arr[x].pop_back(); 71 if(c=="onto") 72 { 73 guiwei(d); 74 } 75 else if(c=="over") 76 { 77 find_blocks(d); 78 } 79 arr[x].push_back(v); 80 } 81 else if(a=="pile") 82 { 83 if(c=="onto") 84 { 85 guiwei(d); 86 yidong(b,d); 87 } 88 else if(c=="over") 89 { 90 yidong(b,d); 91 } 92 } 93 } 94 for(int i=0;i<n;i++) 95 { 96 cout<<i<<":"; 97 for(int t=0;t<arr[i].size();t++) 98 { 99 cout<<" "<<arr[i][t]; 100 } 101 cout<<endl; 102 } 103 return 0; 104 }
vector
vector可以理解为可变长度的数组
可用函数
size(); //返回大小
resize(); //重新定义大小
push_back(); //在最后插入一个元素
pop_back(); //在最后删除一个元素
erase(arr.begin()+n); //删除第n+1个元素
erase(arr.begin(),arr.begin()+3); //删除前三个元素
clear(); //清空
empty(); //判断是否为空
insert(it,2,300); //在it位置上插入2个300,it为vector<int>::iterator it
vector<int> arr[100]; //类似于二维数组,第二维长度可以发生变化