小 B
最近迷上了華容道,但是他老是要花很長的時間才能完成一次。因而,他想到用編程來完成華容道:給定一種局面, 華容道是否根本就沒法完成,若是能完成, 最少須要多少時間。編程
小 B
玩的華容道與經典的華容道遊戲略有不一樣,遊戲規則是這樣的:spa
遊戲的目的是把某個指定位置能夠活動的棋子移動到目標位置。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, 2)(1,2)(圖中空白所示),遊戲的目標是將初始位置在(2, 2)(2,2)上的棋子(圖中綠色圓圈所示)移動到目標位置 (3, 2)(3,2)上。
要將指定塊移入目標位置,必須先將空白塊移入目標位置,空白塊要移動到目標位置,必然是從位置(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\)。
炸一看兩個點感受無從下手(其實一開始我也蒙了):
但實際上是起始點要走到終點就必須帶着空格子走(由於沒有空格子沒法移動)