UVA 101

来源:互联网 发布:notepad linux 编辑:程序博客网 时间:2024/05/17 08:29

刘汝佳上的题目。

#include <cstdio>#include <vector>#include <iostream>using namespace std;vector<int> pile[25];void find(const int n,int aim, int& b, int& g) {for(b=0;b<n;b++)for(g=0;g<pile[b].size();g++) if(pile[b][g] == aim) return;}void moveonto(int ab,int ag,int bb,int bg){//归位a for(int i=ag+1;i<pile[ab].size();i++){int num=pile[ab][i];pile[num].push_back(num);}pile[ab].resize(ag+1);//归位b for(int i=bg+1;i<pile[bb].size();i++){int num=pile[bb][i];pile[num].push_back(num);}pile[bb].resize(bg+1);//放置apile[bb].push_back( pile[ab][ag] );//删去apile[ab].resize(ag);}void moveover(int ab,int ag,int bb,int bg){//归位a for(int i=ag+1;i<pile[ab].size();i++){int num=pile[ab][i];pile[num].push_back(num);}pile[ab].resize(ag+1);//放置a pile[bb].push_back( pile[ab][ag] );//删去apile[ab].resize(ag);}void pileonto(int ab,int ag,int bb,int bg){//归位b for(int i=bg+1;i<pile[bb].size();i++){int num=pile[bb][i];pile[num].push_back(num);}pile[bb].resize(bg+1);//放置afor(int i=ag;i<pile[ab].size();i++){pile[bb].push_back( pile[ab][i] );}pile[ab].resize(ag);}void pileover(int ab,int ag,int bb,int bg){//放置afor(int i=ag;i<pile[ab].size();i++){pile[bb].push_back( pile[ab][i] );}pile[ab].resize(ag);}int main(){int a,b,n;scanf("%d",&n);string s1, s2;for(int i = 0; i < n; i++) pile[i].push_back(i);while(cin>>s1 && s1!="quit") {cin>>a>>s2>>b;int ab, ag, bb, bg;find(n,a,ab,ag);find(n,b,bb,bg);if(ab==bb) continue;if(s1=="move" && s2=="onto") moveonto(ab,ag,bb,bg);if(s1=="move" && s2=="over") moveover(ab,ag,bb,bg);if(s1=="pile" && s2=="onto") pileonto(ab,ag,bb,bg);if(s1=="pile" && s2=="over") pileover(ab,ag,bb,bg);}for(int i=0;i<n;i++){printf("%d:",i);for(int j=0;j<pile[i].size();j++) printf(" %d",pile[i][j]);printf("\n");}}

刘汝佳书上的做法明显更加精简……不过刚学STL……老老实实的把四种行为做出来比较靠谱……

0 0
原创粉丝点击