例题 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的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...
随机推荐
- set/multiset用法详解
集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...
- [luoguP1056] 排座椅(sort + 模拟)
传送门 nc题,一直sort就过了 代码 #include <cstdio> #include <iostream> #include <algorithm> #d ...
- [K/3Cloud] 如何设置设置单据分录中的整列的精度
有时,你可能想设置整列的精度,可以在插件中完成. 设置方法如下 : this.View.GetFieldEditor<DecimalFieldEditor>("FAmount&q ...
- 括号序列(Poj1141)
Poj1141 题目描述: 定义合法的括号序列如下: 1 空序列是一个合法的序列 2 如果S是合法的序列,则(S)和[S]也是合法的序列 3 如果A和B是合法的序列,则AB也是合法的序列 例如:下面的 ...
- JavaScript面向对象实现
JavaScript面向对象实现 一:面向对象三大特征 继承,封装,多态! 二:JavaScript自定义对象 创建对象的方式: 方式1,对象初始化器方式: <script type=&quo ...
- Binary Tree Postorder Traversal(各种非递归实现,完美利用栈结构模拟)
1.后序遍历的非递归实现.(左右根) 难点:后序遍历的非递归实现是三种遍历方式中最难的一种.因为在后序遍历中,要保证左孩子和右孩子都已被访问并且左孩子在右孩子前访问才能访问根结点,这就为流程的控制带来 ...
- Google Chrome Developer Tools
原文:https://www.oschina.net/p/chromedevtools Google发布了Google Chrome Developer Tools,这是一系列面向Chrome开发者的 ...
- HTTP请求方式之GET和POST比较
什么是HTTP协议 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议 HTTP在客户端和服务器之间以request ...
- PLC基础入门
PLC编程入门基础技术知识学习 2016-06-27 xjp7879 摘自 电工技术知... 第一章 可编程控制器简介 可编程序控制器,英文称Programmable Controlle ...
- Centos samba install
Ready Change Root Password passwd root 在提示下建立新密码 静态IP vi /etc/sysconfig/network-scripts/ifcfg-eth0 ...