博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA-227 Puzzle(模拟)
阅读量:5109 次
发布时间:2019-06-13

本文共 1728 字,大约阅读时间需要 5 分钟。

题目:

题意:

给出一个5*5的方格,里边有一个格子是空的,现在给出一串指令,A->空格向上移动,B->空格向下移动,R->空格向右移动,L->空格向左移动。

输出移动后的结果。

思路:

直接上模拟就好了,不过就是输入处理有点恶心,最好用scanf和printf来处理输入输出。

1、空格移动出界和出现不是‘A’、‘B’、‘R’、‘L’中的指令,这两种情况都算是“This puzzle has no final configuration.”。

2、另外在处理指令的时候,遇到1中的情况只要标记一下就好了,最终统一在‘0’的位置退出循环。(WA到怀疑人生)

例如这个样例:

AAAAA

BBBBB
NNNNN
JJJJJ
UUUU
AQ
0
Z

3、输出两两之间用一个空行隔开。

代码:

#include 
#define inf 0x3f3f3f3f#define FRE() freopen("in.txt","r",stdin)using namespace std;typedef long long ll;const int maxn = 5e3+10;int mp[6][6];void toSwap(int& a,int& b){ int t = a; a = b,b = t;}bool Move(char op, int& r,int& c) { if(op=='A') { if(r-1 == 0) return false; toSwap(mp[r][c],mp[r-1][c]); r--; return true; } else if(op=='B') { if(r+1 == 6) return false; toSwap(mp[r][c],mp[r+1][c]); r++; return true; } else if(op == 'R') { if(c+1 == 6) return false; toSwap(mp[r][c],mp[r][c+1]); c++; return true; } else if(op == 'L'){ if(c-1 == 0) return false; toSwap(mp[r][c],mp[r][c-1]); c--; return true; } return false;}void check() { for(int i = 1; i<=5; i++) { for(int j = 1; j<=5; j++) { if(j!=1) printf(" "); printf("%c",mp[i][j]+'A'); } printf("\n"); }}int main() { //FRE(); char str[6]; int cnt = 0; while(1) { int len; for(int i = 1; i<=5; i++) { gets(str); len = strlen(str); if(i == 1 && len == 1 && str[0] == 'Z'){ return 0; } for(int j = 0; j
View Code

 

转载于:https://www.cnblogs.com/sykline/p/9986608.html

你可能感兴趣的文章
【转】用win7(64位)远程桌面连接linux(Ubuntu14.04)详细教程
查看>>
async+await一起使用
查看>>
数据库 —— mySQL相关
查看>>
关于Servlet的几个小问题
查看>>
java 对于表情和特殊字符的转码解码处理
查看>>
jq 对象获取总结大全
查看>>
java生成复杂word文档的完美解决方案
查看>>
Python实用笔记 (25)面向对象高级编程——多重继承
查看>>
JavaScript 累加求和练习 函数
查看>>
Shell编程基础
查看>>
SWT中的布局之-----FormLayout(表格式布局)
查看>>
(转)Foundation-性能优化之NSDateFormatter
查看>>
Luogu3090 [USACO13NOV]空荡荡的摊位Empty Stalls (动态规划)
查看>>
9.过滤器的使用
查看>>
Java学习笔记————异常的捕获及处理
查看>>
输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表
查看>>
链表中倒数第k个节点
查看>>
《信息系统项目管理师》
查看>>
hdu 4778 DP+博弈
查看>>
学术英语写作(1)
查看>>