移动小球链表实现
2015-12-07 17:21
281 查看
有一些小球,从左至右编号为1 2 3 ...... n
执行A 1 4后,小球1被移到4的左边
执行B 3 5后,小球3被移到5的右边
样例输入:
6 2
A 1 4
B 3 5
样例输出:
214536
在此感谢这篇博客给我的帮助:http://blog.csdn.net/taotaotaotao910429/article/details/7831479
执行A 1 4后,小球1被移到4的左边
执行B 3 5后,小球3被移到5的右边
样例输入:
6 2
A 1 4
B 3 5
样例输出:
214536
#include<stdio.h> const int N=50000; struct Node { int order; Node *left,*right; }node ; void CreateNode(int n) { int i; for(i = 1;i <= n;i++) { node[i].order = i; node[i].right = &node[i+1]; node[i+1].left= &node[i]; } node[0].left = NULL; node[0].right = &node[1]; node[1].left = &node[0]; node[i].right = NULL; } void A(int x,int y) { Node *p = &node[x],*q = &node[y]; p->right->left=p->left; p->left->right=p->right; p->right=q; p->left=q->left; q->left->right=p; q->left=p; } void B(int x,int y) { Node *p = &node[x],*q = &node[y]; p->right->left = p->left; p->left->right = p->right; p->left = q; p->right = q->right; q->right->left = p; q->right = p; } int main() { int n,m; char cmd; int x,y; scanf("%d%d",&n,&m); CreateNode(n); while(m--) { scanf("%*c%c%d%d",&cmd,&x,&y); if(cmd == 'A') A(x,y); if(cmd == 'B') B(x,y); } Node *l = &node[0]; l = l->right; while(l->right) { printf("%d",l->order); l = l->right; } return 0; }
在此感谢这篇博客给我的帮助:http://blog.csdn.net/taotaotaotao910429/article/details/7831479
相关文章推荐
- 理解和掌握类的加载过程以及子类继承父类后,重写方法的调用问题
- 第十三周项目3Floyd算法验证
- 第十三周实践项目~Prim算法的验证
- 第16周项目3归并排序算法的改进
- 3115 高精度练习之减法
- rz和sz上传下载文件工具lrzsz
- 节点 二级节点 三级节点 for循环 树结构
- WMI 编程之接收事件通知
- 第十四周 项目2 二叉树排序树中查找的路径
- 支付宝支付开发教程
- 安装redis,含安装步骤和安装中出现的详细错误分析
- 洞穴探测
- SVG 动画实现弹性的页面元素效果
- IntelliJ IDEA Community Edition 14.1.4下 javafx scenebuilder的使用
- JS原生父子页面操作
- CIFilter 创建二维码
- 第十一周项目二:用二叉树求解代数表达式
- Tvos模拟器遥控的快捷键
- Android中的BaseAdapter的使用极其优化
- Supermap人物骨骼动画说明文档