#P1224. PICTURE PUZZLE

PICTURE PUZZLE

本题没有可用的提交语言。

描述
一种图片拼图由九个方块组成,每个方块的每一边都包含一个图片的一半。每个方块上的图片分别是四个指定的图片的左半部分或右半部分,分别用字母 B、C、K 和 P 表示。在每个方块的边缘,图片的左右半部分是对齐的。如果一块方块的左半部分与另一块方块的右半部分相对齐,拼接时两张图片就会匹配。拼图的目的是将这九块方块放入一个三行三列的网格中,使得相邻边上的图片能够匹配。需要注意的是,某些方块可能需要旋转才能匹配。

编写一个程序来解决一个或多个拼图实例。

输入
输入由一系列问题组成。每个问题以问题编号开始,单独占一行。数据的结束由问题编号为 0 来表示。在问题编号后,将有九行描述方块的信息。每一行的格式为:方块编号(1 至 9),然后是方块的顶部、右侧、底部和左侧的图片,按顺序以空格分隔。图片的左半部分为 BL、CL、KL、PL,右半部分为 BR、CR、KR、PR。BL 匹配 BR,CL 匹配 CR,KL 匹配 KR,PL 匹配 PR。(例如,BL 是图片 B 的左半部分,BR 是图片 B 的右半部分)

输出
每个问题的输出应为:以问题编号和冒号(':')开头的行。如果该问题没有解,则输出下一行:“No Solution”。如果有解,应该按照以下格式显示解法:

由于任何解法可能旋转 90、180 或 270 度来得到其他解,因此中间的方块应按照输入时给出的方向对齐,其他方块根据需要进行旋转。每行方块由三行显示,每行之间有空行。单个方块的格式为:

<3个空格><2个字符顶部图片><3个空格>

<2个字符左侧图片><空格><1个数字方块编号><空格><2个字符右侧图片><空格>

<3个空格><2个字符底部图片><3个空格>

每个问题的输出后面应跟一个空行。

1
1 BR KR PL CR
2 CL PR BL KR
3 KR PR CR BL
4 PL KR BL CL
5 PL BR CL KR
6 PR CL BR PL
7 CR KL BL PR
8 BL CR KL PL
9 KL CL PR BL
2
1 PR PR BL CR
2 BR KL CR PR
3 CR BL PL KR
4 KL PL BL CL
5 BR CR PL KR
6 KL BR PL CR
7 CL PL BL KR
8 KR KL CR BL
9 CR KL PR BL
3
1 PL KL CL BR
2 PL CR KL BL
3 PR BR CL KR
4 CR PL BR KR
5 PR CL BR KR
6 BL KL CR PR
7 PL BL CL KR
8 PR CR KL BR
9 KL BL CL PL
0
1:
   CL      KR      KL   
PR 6 BR BL 2 CL CR 7 BL 
   PL      PR      PR   

   PR      PL      PL   
KR 3 CR CL 4 KR KL 8 BL 
   BL      BL      CR   

   BR      BR      CL   
PL 5 CL CR 1 KR KL 9 PR 
   KR      PL      BL   

2:
No Solution

3:
   KL      BR      BL   
BL 6 CR CL 5 KR KL 9 CL 
   PR      PR      PL   

   PL      PL      PR   
KR 7 BL BR 1 KL KR 3 BR 
   CL      CL      CL   

   CR      CR      CR   
PL 2 KL KR 4 PL PR 8 KL 
   BL      BR      BR   

提示
注意,此题对格式要求非常严格,格式错误将会算作错误答案。

来源
Greater New York 2002