Seven Puzzle (AOJ 0121 bfs)
Seven Puzzle
Time Limit : 1 sec, Memory Limit : 65536 KB
Seven Puzzle
7パズルは8つの正方形のカードとこれらのカードがぴたりと収まる枠を使って行います。それぞれのカードは互いに區別できるように、0,1,2....7と番號がつけられています。枠には、縦に2個、橫に4個のカードを並べることができます。
7パズルを始めるときには、まず枠にすべてのカードを入れます。枠のなかで0のカードだけは、上下左右に隣接するカードと位置を交換することができます。たとえば、枠の狀態が図( a )のときに、0のカードの右に隣接した、7のカードと位置を交換すれば、図( b )の狀態になります。あるいは、図( a )の狀態から0のカードの下に隣接した2のカードと位置を交換すれば図( c )の狀態になります。カードの位置を入れ替える操作はこれだけが許されます。図( a )の狀態で0のカードと上下左右に隣接するカードは7と2のカードだけなので、これ以外の位置の入れ替えは許されません。
ゲームの目的は、カードをきれいに整列して図( d )の狀態にすることです。最初の狀態を入力とし、カードをきれいに整列するまでに、必要な最小手數を出力して終了するプログラムを作成してください。ただし、入力されたカードの狀態からは図( d )の狀態に移ることは可能であるとします。
入力データは、1行に8つの數字が與えられます。これらは、最初の狀態のカードの並びを表します。図( a )の數字表現は0,7,3,4,2,5,1,6に、図( c )は2,7,3,4,0,5,1,6となります。
図( a ) 0,7,3,4,2,5,1,6の場合 |
図( b ) 7,0,3,4,2,5,1,6の場合 |
図( c ) 2,7,3,4,0,5,1,6の場合 |
図( d ) 0,1,2,3,4,5,6,7(最終狀態) |
Input
1つ目のパズルの狀態(整數;空白區切り)
2つ目のパズルの狀態(整數;空白區切り)
:
:
與えられるパズルの數は1000以下です。
Output
1つ目のパズルの狀態から最終狀態へ移行する最小手數(整數)
2つ目のパズルの狀態から最終狀態へ移行する最小手數(整數)
:
:
Sample Input
0 1 2 3 4 5 6 7
1 0 2 3 4 5 6 7
7 6 5 4 3 2 1 0
Output for the Sample Input
0
1
28
題意:給出0~7的序列(2*4),只能0和周圍數字交換,問最少交換多少次可以是給出的序列變成0 1 2 3 4 5 6 7 思路:先搜一遍把所有答案保存下來。
因為一句話位置寫錯了當時沒做出來。。 代碼:
#include
#include
#include
#include
#include
#include
#include