移动小球问题
2014-08-09 22:27
190 查看
数组做法
链式结构做法
#include<iostream> using namespace std; int A[100]; int find(int); void shift_circular_left(int ,int); void shift_circular_right(int ,int); int main() { int n,m; char type; int x,y,p,q; cin>>n>>m; for(int i=1;i<=n;i++) A[i]=i; for(int i=0;i<m;i++) { cin>>type>>x>>y; p=find(x); q=find(y); if(type=='A') { if(q>p) shift_circular_left(p,q-1); else shift_circular_right(q,p); } else { if(q>p) shift_circular_left(p,q); else shift_circular_right(q+1,p); } } for(int i=1;i<=n;i++) cout<<A[i]<<" "; cout<<endl; return 0; } int find(int s) { int i; for( i=1;;i++) if(s==A[i]) return i; } void shift_circular_left(int s,int t) { int temp; temp=A[s]; for(int i=s+1;i<=t;i++) A[i-1]=A[i]; A[t]=temp; } void shift_circular_right(int s,int t) { int temp; temp=A[t]; for(int i=t-1;i>=s;i--) A[i+1]=A[i]; A[s]=temp; }
链式结构做法
#include<iostream> using namespace std; int left_[100]; int right_[100]; void link(int,int); int main() { int n,m; char type; int x,y; cin>>n>>m; for(int i=1;i<=n;i++) left_[i]=i-1,right_[i]=i+1; right_[0]=1,left_[n+1]=n; for(int i=0;i<m;i++) { cin>>type>>x>>y; link(left_[x],right_[x]); if(type=='A') { link(left_[y],x); link(x,y); } else { link(x,right_[y]); link(y,x); } } for(int i=0,start=0;i<n;i++) { cout<<right_[start]<<" "; start=right_[start]; } cout<<endl; return 0; } void link(int s,int t) { right_[s]=t; left_[t]=s; }
相关文章推荐
- E - 小球移动问题(定积分)
- 小球移动问题
- 数据结构算法问题 移动小球
- 如何解决移动应用中 PeekMessage 调用的资源利用问题
- 一组关于手持移动设备使用安全问题的统计数据
- 用Unlocker软件解决WinXP中U盘或移动硬盘无法弹出的问题
- 经典面试问题:12小球问题算法(抄的)
- 实现提交页面后滚动条自动移动问题
- 移动硬盘常见问题的解决
- 移动硬盘的常见问题
- 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.
- 移动硬盘常见问题的解决
- 小球问题:有N个小球,其中有一个重量和别的不一样,用天平称出,确定偏重还是偏轻,称量次数最少
- 用asp.net开发移动WAP应用程序的问题
- 移动开发中的字符集转换问题
- 如何解决移动软件中的连接状态问题
- MapControl控件放大或移动错位的问题
- VC2005开发移动程序的小问题
- 移动硬盘不可用地问题
- vs2005中控件自由移动问题