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;
}

 

posted @ 2012-05-02 20:06  open your eyes  阅读(1109)  评论(0编辑  收藏  举报