全排列的變換 冒泡

2021-08-19 22:22:42 字數 1058 閱讀 7173

聽取了別的思路,不是自己做出來的。。。。

全排列的變換

time limit: 1000 ms

memory limit: 65536 kib

problem description

小鑫今天從玄黃那裡拿到了乙個長度為n的全排列,可是小鑫不喜歡這個全排列,於是小鑫想要把這個全排列變成他希望的樣子。

但是全排列不是隨便就能變換的,全排列每次變換只能交換相鄰的兩個數字。例如:123可以通過一步變換變成132,但是不能通過一步變換變成321。

現在你能幫助小鑫把他從玄黃那裡拿到的全排列變成他希望的樣子嗎?小鑫想知道最少需要多少步變換才能將手裡的全排列變成他希望的樣子。

input

第一行輸入乙個整數n(3<=n<=9),代表全排列的長度。

第二行輸入乙個長度為n的全排列,相鄰兩個數字之間用空格隔開,代表這是小鑫開始獲得的全排列。

第三行輸入乙個長度為n的全排列,相鄰兩個數字之間用空格隔開,代表小鑫希望獲得的全排列。

output

輸出乙個整數,代表從第乙個全排列變成第二個全排列最少需要進行的變換次數。

sample input

4

1 2 4 3

3 2 1 4

sample output

4

hint

第一步,將1和2交換變為2 1 4 3

第二步,將4和3交換變為2 1 3 4

第三步,將1和3交換變為2 3 1 4

第四步,將2和3交換變為3 2 1 4

source

思路:將先輸入的陣列和後輸入的陣列相比較,記錄下變換後的每乙個數的位置,然後再冒泡進行排序,記錄下交換次數。

**:#include

using namespace std;

int main()}}

int ans=0;

for(int i=1; i<=n; i++)}}

cout<

46 全排列 全排列 遞迴

遞迴的時候每次確定乙個位置的數字 nums陣列在遞迴過程中分為左右兩部分,左邊部分是已經確定好的部分,而右邊是待確定數字的部分。每次都嘗試用當前位置右邊的數字來交換當前數字以確定當前數字。題目可以使用collections來優化。詳見 class solution 遞迴過程中每次確定乙個位置的數,遞...

46 全排列 47 全排列II

46.全排列 這題和之前做的劍指offer上的字串全排列。一樣。分析 1 如果原始要排列的陣列順序為1 2 3 4,現在只要分別交換1 2,1 3,1 4然後對剩下的3個元素進行遞迴的排列。自己的code 100 class solution if start nums.size 1 return ...

輸出全排列(C 全排列函式)

請編寫程式輸出前n個正整數的全排列 n 10 並通過9個測試用例 即n從1到9 觀察n逐步增大時程式的執行時間。輸入格式 輸入給出正整數n 10 輸出格式 輸出1到n的全排列。每種排列佔一行,數字間無空格。排列的輸出順序為字典序,即序列a 1,a2,an 排在序列b1,b2,bn之前,如果存在k使得...