例题 3-5 谜题 uva227 Puzzle
A children’s puzzle that was popular years ago consisted of a × frame which contained small
squares of equal size. A unique letter of the alphabet was printed on each small square. Since there
were only squares within the frame, the frame also contained an empty position which was the same
size as a small square. A square could be moved into that empty position if it were immediately to the
right, to the left, above, or below the empty position. The object of the puzzle was to slide squares
into the empty position so that the frame displayed the letters in alphabetical order.
The illustration below represents a puzzle in its original configuration and in its configuration after
the following sequence of moves:
) The square above the empty position moves.
) The square to the right of the empty position moves.
) The square to the right of the empty position moves.
) The square below the empty position moves.
) The square below the empty position moves.
) The square to the left of the empty position moves.
Write a program to display resulting frames given their initial configurations and sequences of moves.
Input
Input for your program consists of several puzzles. Each is described by its initial configuration and
the sequence of moves on the puzzle. The first lines of each puzzle description are the starting
configuration. Subsequent lines give the sequence of moves.
The first line of the frame display corresponds to the top line of squares in the puzzle. The other
lines follow in order. The empty position in a frame is indicated by a blank. Each display line contains
exactly characters, beginning with the character on the leftmost square (or a blank if the leftmost
square is actually the empty frame position). The display lines will correspond to a legitimate puzzle.
The sequence of moves is represented by a sequence of As, Bs, Rs, and Ls to denote which square
moves into the empty position. A denotes that the square above the empty position moves; B denotes
that the square below the empty position moves; L denotes that the square to the left of the empty
position moves; R denotes that the square to the right of the empty position moves. It is possible that
there is an illegal move, even when it is represented by one of the move characters. If an illegal move
occurs, the puzzle is considered to have no final configuration. This sequence of moves may be spread
over several lines, but it always ends in the digit . The end of data is denoted by the character Z.
Output
Output for each puzzle begins with an appropriately labeled number (Puzzle #, Puzzle #, etc.). If
the puzzle has no final configuration, then a message to that effect should follow. Otherwise that final
configuration should be displayed.
Format each line for a final configuration so that there is a single blank character between two
adjacent letters. Treat the empty square the same as a letter. For example, if the blank is an interior
position, then it will appear as a sequence of blanks — one to separate it from the square to the left,
one for the empty position itself, and one to separate it from the square to the right.
Separate output from different puzzle records by one blank line.
Note: The first record of the sample input corresponds to the puzzle illustrated above.
Sample Input
TRGSJ
XDOKI
M VLN
WPABE
UQHCF
ARRBBL0
ABCDE
FGHIJ
KLMNO
PQRS
TUVWX
AAA
LLLL0
ABCDE
FGHIJ
KLMNO
PQRS
TUVWX
AAAAABBRRRLL0
Z
Sample Output
Puzzle #:
T R G S J
X O K L I
M D V B N
W P A E
U Q H C F
Puzzle #:
A B C D
F G H I E
K L M N J
P Q R S O
T U V W X
Puzzle #:
This puzzle has no final configuration.
有 一个4*4的网格,其中恰好有一个 格子是空的 其他的 格子 各有一个字母 现在 给你四种操作 也就是 A,B,L,R分别表示把空格上下左右的相邻字母 移动到 空格内 现在 开始输入 输入 : 前四行 是 网格 之中的字母 然后紧接着的是 一系列操作
如果 输入不正确的话 就输出
This puzzle has no final configuration.
简单的 一个 拼图模拟题 就是 输入输出 太坑 (泪奔).
----还没看出来 格式 哪里错了------
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
char a[][],b[];
int i,j,m,n,l,x,y,count=,boom;
while(gets(a[])) //输入 第一行的 数据
{
if(a[][]=='Z') //如果 出现了Z 就代表 程序 结束
break;
for(i=;i<=;i++) //如果没有结束的 话 那么就输入 剩下的 四行 数据
gets(a[i]);
for(i=;;i++)
{
scanf("%c",&b[i]);
if(b[i]=='')
break;
}
//scanf("%s",b); // 输入指令 .
l=strlen(b)-; //得到指令的长度 (因为 指令 以 0 作为结束 所以...)
for(i=;i<;i++)
{
for(j=;j<;j++)
{
if(a[i][j]==' ')
{
x=i; //现在 得到了 空格 在 4*4 格子中的
y=j;
i=;
break;
}
}
if(i==)
break;
}
for(i=;i<l;i++)
{
if(b[i]=='A')
{
if(x-<)
{
boom=;
break;
}
swap(a[x-][y],a[x][y]);
x--;
}
else
if(b[i]=='B')
{
if(x+>)
{
boom=;
break;
}
swap(a[x+][y],a[x][y]);
x++;
}
else
if(b[i]=='R')
{
if(y+>)
{
boom=;
break;
}
swap(a[x][y+],a[x][y]);
y++;
}
else
if(b[i]=='L')
{
if(y-<)
{
boom=;
break;
}
swap(a[x][y],a[x][y-]);
y--;
}
}
if(count!=)
printf("\n");
printf("Puzzle #%d:\n",count++);
if(boom==)
{
printf("This puzzle has no final configuration.\n");
boom=;
}
else
for(i=;i<;i++)
{
printf("%c",a[i][]);
for(j=;j<;j++)
{
printf(" %c",a[i][j]);
}
printf("\n");
}
memset(a,'',sizeof(a));
getchar();
}
return ;
}
例题 3-5 谜题 uva227 Puzzle的更多相关文章
- 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
题目描述:算法竞赛入门经典习题3-5 题目思路:模拟题 #include <stdio.h> #include <string.h> #define maxn 55 char ...
- 习题3-5 谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)
#include<stdio.h> #include<string.h> char s[5][5]; int main() { while(gets(s[0])) { int ...
- Uva227.Puzzle
题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 谜题 UVA227
这道题目还是不难的,但是要注意gcc里面gets已经不能用了,用gets_s还是可以的,尽管我并不知道有什么区别 #include<stdio.h>#include<stdlib.h ...
- [Swift]LeetCode773. 滑动谜题 | Sliding Puzzle
On a 2x3 board, there are 5 tiles represented by the integers 1 through 5, and an empty square repre ...
- UVA-227 Puzzle(模拟)
题目: 题目浏览传送门 题意: 给出一个5*5的方格,里边有一个格子是空的,现在给出一串指令,A->空格向上移动,B->空格向下移动,R->空格向右移动,L->空格向左移动. ...
- UVA227 - Puzzle(紫书习题3.5)
#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring&g ...
- Rust 阴阳谜题,及纯基于代码的分析与化简
Rust 阴阳谜题,及纯基于代码的分析与化简 雾雨魔法店专栏 https://zhuanlan.zhihu.com/marisa 来源 https://zhuanlan.zhihu.com/p/522 ...
- [笔记]cin、cout与scanf、printf的效率差异对比分析
之前上传UVa227 puzzle时,好不容易AC了,但发现自己用时50(ms),而在VJ上看到人家都是40ms.20ms,于是打开一个20ms的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...
随机推荐
- mysql replication driver 在jdk1.6下失效问题解决
mysql diver包里有relication driver,可以在jdbc层进行读写分离,主写从读默认的配置方式是指定driver为ReplicationDriver,并改写jdbc url一起j ...
- 【ZJOI2017 Round1练习&BZOJ4774】D3T2 road(斯坦纳树,状压DP)
题意: 对于边带权的无向图 G = (V, E),请选择一些边, 使得1<=i<=d,i号节点和 n − i + 1 号节点可以通过选中的边连通, 最小化选中的所有边的权值和. d< ...
- hdu4701 Game(递推博弈)
题意: Alice初始有A元,Bob有B元. 有N个物品,第i个物品价值为Ci.Alice和Bob轮流买一些(>=1)物品.不能移动的人输.购买有一个限制,对于第1 个之后物品,只有当第i-1个 ...
- JVM定位程序假死或cpu占用高的线程
linux系统: 参考:https://blog.csdn.net/qq_40197576/article/details/80287515 1>使用top命令查看占用cpu进程情况,得到jav ...
- NOIP 2009 潜伏者
P1071 潜伏者 题目描述 RR 国和 SS 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动.历尽艰险后,潜伏于 SS 国的 RR 国间谍小 CC 终于摸清了 SS 国军用密码的编码规则: ...
- Ubuntu 16.04安装7zip的图形界面工具PeaZip
其实PeaZip不是7zip的图形界面工具,而是一整套方案,里面包括了7z格式的解压缩等. PeaZip Linux版本只有32位包,如果你使用的是64位Ubuntu系统,那么先打开终端运行下面的命令 ...
- MyBatis实体属性与表的字段不对应的解决方案
1.通过在查询的SQL语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上,这种方式是通过在SQL语句中定义别名来解决字段名和属性名的映射关系的. ...
- springmvc @ResponseBody 乱码
在spring配置文件中加入如下代码 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMet ...
- 将mysql数据库数据导出为.sql文件
打开Navicat ,在我们要到处的数据上面右击鼠标,然后弹出的快捷菜单上点击“转储SQL 文件”,在再次弹出的子菜单项中选择第一个“数据跟结构”.
- PCCs系数
package ai; public class pccs { public static void main(String[] args) { double same[][]=new double[ ...