幻方變換 puzzle

2021-09-12 14:42:28 字數 2097 閱讀 8781

如果乙個 3 × 3 的矩陣中,整數 1-9 中的每個都恰好出現一次,我們稱這個矩陣為乙個幻 方。 

我們可以對乙個幻方進行一些操作。具體來說,我們可以 

• 選擇幻方的一行,整體向右移動一格,並將最右側的數字移到最左邊;或者  

• 選擇幻方的一列,整體向下移動一格,並將最下側的數字移到最上面。  

例如,下面兩個操作分別是一種合法的行操作和列操作:  

顯然,乙個合法的幻方經過一次操作後一定還是合法的幻方。 

給定幻方的初始狀態,請問,最少要經過多少次變換,才能變成最終狀態? 

第一行乙個整數 t (1 ≤ t ≤ 200000),表示測試用例的數量。

接下來有 t 組測試用例,每組測試用例前有乙個空行。每組樣例的前 3 行為幻方的初始狀態,後 3 行為幻方的最終狀態。每行的數字之間沒有空格。

保證初始狀態和最終狀態都是合法的幻方。

對於每組測試用例在一行內輸出乙個整數,表示答案。如果不可能從起始狀態轉變為最終狀態,輸出 impossible。
4

123456

789231

456789

457213

689257

361489

927641

358297

651384

123456

789123

456789

2

3impossible

0

這道題在比賽的時候時間限制是10s,顯然通過暴力的方法來做。

這裡t的範圍是小於等於200000,然後幻方變換的時候如果考慮使用bfs,那麼時間複雜度就會十分大,那麼解決本題就需要針對這個問題進行優化,那麼就下來的問題就是考慮怎麼優化。

既然t很大,那麼是否可以使用同乙個模板答案,然後只需要輸出相應位置的數就行了呢?(如果可行的話,時間複雜度就直接下降了不少~~~)

而如果說要實現這個假設,就需要我們輸入的所有的資料在開始的時候資料是相同,雖然題目中的資料不同,但題是死的,人是活的,可以將題中的起始資料轉化成同乙個資料,貌似行得通,那就試一下吧!

for(int i=0;i<9;++i)

for(int i=0;i<9;++i)

for(int i=0;i<9;++i)

beginn[i]=i+'1';

這裡解決了以後,後面就簡單了很多。

對於本題的搜尋是以123456789為起始點進行的搜尋,每次進行的操作是題目中給出的條件

手動進行行或者列整體的移動。

這裡用到了count函式:其功能類似於find。這個函式使用一對迭代器和乙個值做引數,返回這個值出現次數的統計結果。 

編寫程式讀取一系列int型資料,並將它們儲存到vector物件中,然後統計某個指定的值出現了多少次。 

考慮乙個問題,什麼時候輸出impossible,什麼時候輸出次數。

在結果出現impossible的時候,也就是意味著現在出現的這個數是我們bfs所沒有找到的,如果說找到了這個數,那麼這個數用count計算得到的結果一定是大於0的。

ac**如下:

#include#include#include#include#include#include#includeusing namespace std;

mapmp;

mapmmp;

struct xiao}}

}int main()

}beginn[cnt]='\0';

cnt=0;

for(int i=0; i<3; ++i)

}endd[cnt]='\0';

for(int i=0;i<9;++i)

for(int i=0;i<9;++i)

for(int i=0;i<9;++i)

beginn[i]=i+'1';

if(mp.count(endd)<=0||mp.count(beginn)<=0)

else

}return 0;

}

matlab幻方變換 Matlab入門1 幻方矩陣

個人理解matlab是以工具為主,為了解決數學問題 作圖而存在的輔助工具,我們只需要針對一系列問題思考需要呼叫的知識然後doc help呼叫文件學習,通過逐步積累最後通透相關數學問題 學會對各種常見圖形進行繪製即可。於是關於matlab的知識我的想法就是把每一道題需要用到的知識挖深掌握,然後其他基礎...

奇數幻方 輸入N得到NXN幻方

include intmain for int j 0 j1 j h j sum1 for int j 0 j1 j l j sum2 for int i 0 i 判斷每行 列相等個數 for int j 0 j1 j 計算對角線數字和 e n 1 for int i 0 i1 i 計算反對角線數字...

四階幻方 反幻方c

把1 16的數字填入4x4的方格中,使得行 列以及兩個對角線的和都相等,滿足這樣的特徵時稱為 四階幻方。四階幻方可能有很多方案。如果固定左上角為1,請計算一共有多少種方案。比如 1 2 15 16 12 14 3 5 13 7 10 4 8 11 6 9 以及 1 12 13 8 2 14 7 11...