例题 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-proxy 快速实现mysql 集群 读写分离
目前较为常见的mysql读写分离分为两种: 1. 基于程序代码内部实现:在代码中对select操作分发到从库:其它操作由主库执行:这类方法也是目前生产环境应用最广泛,知名的如DISCUZ X2.优点是 ...
- bzoj 1005 [HNOI2008] 明明的烦恼 (prufer编码)
[HNOI2008]明明的烦恼 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5907 Solved: 2305[Submit][Status][Di ...
- POJ 3518 (后缀自动机)
POJ 3518 Boring Problem : 给一个串S,询问串S有多个子串出现至少两次且位置不重叠. Solution : 对S串建立后缀自动机,再建立后缀树,dfs一遍统计处每个结点的子树中 ...
- winform总结6=>线程和委托的关系
基础类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...
- 2017-10-01-afternoon
T1 一道图论好题(graph) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带 ...
- JSON与对象之间的转换
import com.alibaba.fastjson.JSON;import com.fasterxml.jackson.databind.ObjectMapper;import com.faste ...
- MySQL主主复制搭建教程收集(待实践)
先收集,后续再实践. http://www.cnblogs.com/ahaii/p/6307648.html http://blog.csdn.net/jenminzhang/article/deta ...
- paramiko错误信息:Paramiko error: size mismatch in put
在使用paramiko的put往远处服务器上传资源的时候,出现类似下面的错误信息 The code in paramiko's sftp_client.py:putfo() reads at the ...
- Elasticsearch学习系列之mapping映射
什么是映射 为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本(Full-text)或精确(Exact-value)的字符串值,Elasticsearch需要知道每个字段里面 ...
- html实现类似excel的复杂表格,及导出到excel
1. excellentexport.js https://github.com/jmaister/excellentexport/tree/2.0.3 2.fiddle example https ...