P1979華容道(神仙題)

題目描述

小 B 最近迷上了華容道,但是他老是要花很長的時間才能完成一次。因而,他想到用編程來完成華容道:給定一種局面, 華容道是否根本就沒法完成,若是能完成, 最少須要多少時間。編程

小 B 玩的華容道與經典的華容道遊戲略有不一樣,遊戲規則是這樣的:spa

  1. 在一個 $ n \times m​ $ 棋盤上有 $ n \times m ​$ 個格子,其中有且只有一個格子是空白的,其他 $ n \times m​ -1 $ 個格子上每一個格子上有一個棋子,每一個棋子的大小都是 $ 1 \times 1​ $ 的;
  2. 有些棋子是固定的,有些棋子則是能夠移動的;
  3. 任何與空白的格子相鄰(有公共的邊)的格子上的棋子均可以移動到空白格子上。

遊戲的目的是把某個指定位置能夠活動的棋子移動到目標位置。code

給定一個棋盤,遊戲能夠玩 $ q $ 次,固然,每次棋盤上固定的格子是不會變的, 可是棋盤上空白的格子的初始位置、 指定的可移動的棋子的初始位置和目標位置卻可能不一樣。第 i 次玩的時候, 空白的格子在第 $ EX_i $ 行第$ EY_i $ 列,指定的可移動棋子的初始位置爲第 $ SX_i $ 第 $ SY_i $ 列,目標位置爲第 $ TX_i $ 行第 $ TY_i $ 列。blog

假設小 B 每秒鐘能進行一次移動棋子的操做,而其餘操做的時間均可以忽略不計。請你告訴小 B 每一次遊戲所須要的最少時間,或者告訴他不可能完成遊戲。遊戲

輸入輸出格式

輸入格式:class

第一行有 33個整數,每兩個整數之間用一個空格隔開,依次表示n,m,qn,m,q;im

接下來的 nn 行描述一個n \times mn×m 的棋盤,每行有mm個整數,每兩個整數之間用一個空格隔開,每一個整數描述棋盤上一個格子的狀態,00 表示該格子上的棋子是固定的,11 表示該格子上的棋子能夠移動或者該格子是空白的。qq

接下來的 qq 行,每行包含 66 個整數依次是 EX_i,EY_i,SX_i,SY_i,TX_i,TY_iEXi,EYi,SXi,SYi,TXi,TYi,每兩個整數之間用一個空格隔開,表示每次遊戲空白格子的位置,指定棋子的初始位置和目標位置。數據

輸出格式:img

共qq 行,每行包含 11 個整數,表示每次遊戲所須要的最少時間,若是某次遊戲沒法完成目標則輸出\(−1\)

輸入輸出樣例

輸入樣例#1:

3 4 2
0 1 1 1
0 1 1 0
0 1 0 0
3 2 1 2 2 2
1 2 2 2 3 2

輸出樣例#1:

2
-1

說明

【輸入輸出樣例說明】

棋盤上劃叉的格子是固定的,紅色格子是目標位置,圓圈表示棋子,其中綠色圓圈表示目標棋子。

  1. 第一次遊戲,空白格子的初始位置是 (3,2)(3,2)(圖中空白所示),遊戲的目標是將初始位置在(1, 2)(1,2)上的棋子(圖中綠色圓圈所表明的棋子)移動到目標位置(2, 2)(2,2)(圖中紅色的格子)上。

移動過程以下:

img

  1. 第二次遊戲,空白格子的初始位置是(1, 2)(1,2)(圖中空白所示),遊戲的目標是將初始位置在(2, 2)(2,2)上的棋子(圖中綠色圓圈所示)移動到目標位置 (3, 2)(3,2)上。

    img

要將指定塊移入目標位置,必須先將空白塊移入目標位置,空白塊要移動到目標位置,必然是從位置(2,2)(2,2)上與當前圖中目標位置上的棋子交換位置,以後能與空白塊交換位置的只有當前圖中目標位置上的那個棋子,所以目標棋子永遠沒法走到它的目標位置, 遊戲沒法完成。

【數據範圍】

對於\(30\%\)的數據,\(1 ≤ n, m ≤ 10,q = 1\)

對於 \(60\%\)的數據,\(1 ≤ n, m ≤ 30,q ≤ 10\)

對於 \(100\%\)的數據,\(1 ≤ n, m ≤ 30,q ≤ 500\)

炸一看兩個點感受無從下手(其實一開始我也蒙了):

但實際上是起始點要走到終點就必須帶着空格子走(由於沒有空格子沒法移動)

相關文章
相關標籤/搜索