首页 > 学院 > 开发设计 > 正文

poj1208

2019-11-11 02:33:40
字体:
来源:转载
供稿:网友

题目大意:

按照4条指令搬运积木即可。 1、move a onto b 在將a搬到b上之前,先將a和b上的積木放回原來的位置(例如:1就放回1的最开始位罝) 2、move a over b 在將a搬到b所在的那堆积木上前,先將a上的积木放回原來的位罝(b所在的那堆不动) 3、pile a onto b 將a本身和其上的积木一起放到b上,在搬之前b上方的积木放回原位 4、pile a over b 將a本身和其上的积木一起搬到到b所在的那堆上 5、quit 结束命令,前四个动作中若a=b,或者a, b在同一堆中,该动作不合法,不做改变。

解题思路:

模拟题,分别写4个函数模拟这个过程即可

代码如下:

#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct{ int len; int stack;}pos;int num[30][30],len[30],n,a,b;pos p[30];char ch1[20],ch2[20];void moveonto(){ int i,j,x,y; x=p[a].stack;y=p[a].len; for(i=y+1;i<=len[x];i++) { num[num[x][i]][++len[num[x][i]]]=num[x][i]; p[num[x][i]].len=len[num[x][i]]; p[num[x][i]].stack=num[x][i]; } num[p[b].stack][++len[p[b].stack]]=a; p[a].len=len[p[b].stack]; p[a].stack=p[b].stack; len[x]=y-1;}void moveover(){ int i,j,x,y; x=p[a].stack;y=p[a].len; for(i=y+1;i<=len[x];i++) { num[num[x][i]][++len[num[x][i]]]=num[x][i]; p[num[x][i]].len=len[num[x][i]]; p[num[x][i]].stack=num[x][i]; } num[p[b].stack][++len[p[b].stack]]=a; p[a].len=len[p[b].stack]; p[a].stack=p[b].stack; len[x]=y-1;}void pileover(){ int i,j,x,y; x=p[a].stack;y=p[a].len; for(i=y;i<=len[x];i++) { num[p[b].stack][++len[p[b].stack]]=num[x][i]; p[num[x][i]].len=len[p[b].stack]; p[num[x][i]].stack=p[b].stack; } len[x]=y-1;}void pileonto(){ int i,j,x,y; x=p[b].stack;y=p[b].len; for(i=y+1;i<=len[x];i++) { num[num[x][i]][++len[num[x][i]]]=num[x][i]; p[num[x][i]].len=len[num[x][i]]; p[num[x][i]].stack=num[x][i]; } len[x]=y; x=p[a].stack;y=p[a].len; for(i=y;i<=len[x];i++) { num[p[b].stack][++len[p[b].stack]]=num[x][i]; p[num[x][i]].len=len[p[b].stack]; p[num[x][i]].stack=p[b].stack; } len[x]=y-1;}int main(){ int i,j; scanf("%d",&n); for(i=0;i<n;i++) { p[i].len=1; p[i].stack=i; len[i]=1; num[i][1]=i; } while(scanf("%s",ch1)!=EOF&&(strcmp(ch1,"quit"))) { scanf("%d%s%d",&a,ch2,&b); if((!strcmp(ch1,"move"))&&(!strcmp(ch2,"onto"))) { if(a==b||(p[a].stack==p[b].stack)) { continue; } moveonto(); } if((!strcmp(ch1,"move"))&&(!strcmp(ch2,"over"))) { if(a==b||(p[a].stack==p[b].stack)) { continue; } moveover(); } if((!strcmp(ch1,"pile"))&&(!strcmp(ch2,"onto"))) { if(a==b||(p[a].stack==p[b].stack)) { continue; } pileonto(); } if((!strcmp(ch1,"pile"))&&(!strcmp(ch2,"over"))) { if(a==b||(p[a].stack==p[b].stack)) { continue; } pileover(); } } for(i=0;i<n;i++) { PRintf("%d:",i); for(j=1;j<=len[i];j++) { printf(" %d",num[i][j]); } printf("/n"); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表