UVA 101
不知道 为什么一老是runtime error,求指点,谢谢
#include<iostream> #include<vector> #include<cctype> #include<string> #include<algorithm> using namespace std; void init_vector(vector<int>v[],int sum) { for(int i=0;i<sum;i++) v[i].push_back(i); } int find_value(vector<int> v[],int value,int sum) { int flag=0; for(int i=0;i<sum;i++) { for(int j=0;j<v[i].size();j++) { if(v[i][j]==value) { return i; flag=1; break; } } if(flag)break; } } void move_onto(vector<int> v[],int m,int n,int sum) { int m_position=find_value(v,m,sum); int n_position=find_value(v,n,sum); int i,flag1=0,flag2=0; for(i=0;i<v[m_position].size();i++) { if(v[m_position][i]==m) { if(i<v[m_position].size()-1) { i=i+1; flag1=1; int len=v[m_position].size()-1; while(i<=len) { int temp=find_value(v,v[m_position][len--],sum); v[temp].push_back(v[m_position][len]); v[m_position].pop_back(); } if(flag1)break; } if(flag1)break; } if(flag1)break; } for(i=0;i<v[n_position].size();i++) { if(v[n_position][i]==n) { if(i<v[n_position].size()-1) { i=i+1; int len1=v[n_position].size()-1; while(i<=len1) { int temp=find_value(v,v[n_position][len1--],sum); v[temp].push_back(v[n_position][len1]); v[n_position].pop_back(); } if(flag2)break; } if(flag2)break; } if(flag2)break; } v[n_position].push_back(m); v[m_position].pop_back(); } void move_over(vector<int> v[],int m,int n,int sum) { int m_position=find_value(v,m,sum); int n_position=find_value(v,n,sum); int i,flag=0; for(i=0;i<v[m_position].size();i++) { if(v[m_position][i]==m) { if(i<v[m_position].size()-1) { i=i+1; int len=v[m_position].size()-1; while(i<=len) { int temp=find_value(v,v[m_position][len--],sum); v[temp].push_back(v[m_position][i]); v[m_position].pop_back(); } if(flag)break; } if(flag)break; } if(flag)break; } v[n_position].push_back(m); v[m_position].pop_back(); } void pile_onto(vector<int> v[],int m,int n,int sum) { int m_position=find_value(v,m,sum); int n_position=find_value(v,n,sum); int i,flag1=0,flag2=0; for(i=0;i<v[n_position].size();i++) { if(v[n_position][i]==n) { if(i<v[n_position].size()-1) { i=i+1; int len=v[n_position].size()-1; while(i<=len) { int temp=find_value(v,v[n_position][len--],sum); v[temp].push_back(v[n_position][i]); v[n_position].pop_back(); } if(flag2)break; } if(flag2)break; } if(flag2)break; } for(i=0;i<v[m_position].size();i++) { if(v[m_position][i]==m) { int j=i; int len=v[m_position].size()-1; while(i<=len) { v[n_position].push_back(v[m_position][i]); i++; } while(j<=len) { v[m_position].pop_back(); j++; } if(flag1)break; } if(flag1)break; } } void pile_over(vector<int> v[],int m,int n,int sum) { int m_position=find_value(v,m,sum); int n_position=find_value(v,n,sum); int i,flag1=0,flag2=0; for(i=0;i<v[m_position].size();i++) { if(v[m_position][i]==m) { int len=v[m_position].size()-1; int j=i; while(i<=len) { v[n_position].push_back(v[m_position][i]); i++; } while(j<=len) { v[m_position].pop_back(); j++; } if(flag2)break; } if(flag2)break; } } int main() { int sum; while(cin>>sum) { string temp1,temp2; int m,n; vector<int> v[50]; init_vector(v,sum); while(true) { cin>>temp1; cin.ignore(); if(temp1=="quit")break; else { cin>>m; cin.ignore(); cin>>temp2; cin>>n; cin.ignore(); if(m==n)continue; if(temp1=="move"&&temp2=="onto") { move_onto(v, m,n,sum); } else if(temp1=="move"&&temp2=="over") { move_over(v, m,n,sum); } else if(temp1=="pile"&&temp2=="onto") { pile_onto(v, m,n,sum); } else { pile_over(v, m,n,sum); } } } for(int i=0;i<sum;i++) { cout<<i<<": "; for(int j=0;j<v[i].size();j++) { cout<<v[i][j]<<" "; } cout<<endl; } } return 0; }