例题 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的代码查看人家强在哪里.但结果研究了半天感觉差不多,于是 ...
随机推荐
- 命令行下设置 PYTHONPATH 来正确运行Python代码
写Python程序,总要使用一些自己使用的库:在运行此类程序的时候,就需要先配置好 PYTHONPATH 环境变量:否则会导致找不到库错误. Windows下,可以写一个bat来简化配置: @ECHO ...
- POJ-1325 Machine Schedule,和3041有着异曲同工之妙,好题!
Machine Schedule Time Limit: 1000MS Memory Limit: 10000K Description As we all know, machine ...
- 高数(A)下 第十二章
12.1 12.2 12.3 12.4 12.5 12.6 自测题
- java常用工具类 - 全角转半角、半角转全角
全角转半角.半角转全角代码 /** * <PRE> * 提供对字符串的全角->半角,半角->全角转换 * codingwhy.com * </PRE> */ pub ...
- laravel event
事件监听 方法一: web.php Event::listen('eloquent.created: App\post',function(){ dump('A post was created'); ...
- 第三课 MongoDB 数据更新
1.课程大纲 本课程主要解说 MongoDB 数据更新的相关内容.包含文档插入 insert 函数.文档删除 remove函数以及文档更新update函数的基本使用.除此之外.还会介绍 MongoDB ...
- php设计模式——模板模式
最近打算巩固,整理一下设计模式相关的内容.这篇是关于 ——模板模式! 原文:http://www.jb51.net/article/76052.htm ----------------------- ...
- iOS8使用TouchID
iOS8新增了LocalAuthentication框架,用于TouchID的授权使用.亲測,眼下须要用户的设备支持指纹识别并已设置锁屏,并且实际測试过程中反馈比較慢.不能直接跟第三方账号passwo ...
- CSS Modules 解决 react 项目 css 样式互相影响的问题
1. CSS Modules引入目的 写过CSS的人,应该都对一大长串选择器选中一个元素不陌生吧,这种方式,其实定义的就是全局样式,我们时常会因为选择器权重问题,没有把我们想要的样式加上去. 另外,每 ...
- _DataStructure_C_Impl:图的遍历
#include<stdio.h> #include<stdlib.h> #include<string.h> //图的邻接表类型定义 typedef char V ...