johnson trotter 生成排列演算法

2021-09-16 22:20:00 字數 1747 閱讀 6143

思路和步驟:

將數字賦予方向屬性

理解什麼叫可移動方向(後面在1中說明)

判斷是否存在可移動元素

bool judge_move(init* n_n, int n);

定義乙個全域性int k——>用來找出可移動元素中的最大值

定義乙個全域性int loc——>用來記錄最大值當前所在的結構體陣列中的位置

將loc所在的結構體整個和loc所在結構體指向的方向,鄰接的結構體交換

調轉所有大於最大值k的結構體的方向

輸出顯示

重複第3步,直到跳出迴圈

過程展示

結果展示

//生成全排列 johnson trotter 

#include using namespace std;

struct init

;//用來記錄可移動值的最大值;

int k;

int loc = -1;//記錄位置

bool judge_move(init* n_n, int n);

void johnson_trotter(int n);

int main()

return 0;

}void johnson_trotter(int n)

init temp;

//直到 全部都不能 移動 結束

//k 最大可移動值

while (judge_move(n_n, n))

cout << " ";

//輸出方向

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

cout << endl;

//把k 和 它箭頭 所指的值 互換

//向左

if (n_n[loc].dir == 1)

//向右

else if (n_n[loc].dir != 1)

//調轉所有 > k 值的方向

for (int j = 0; j < n; j++)}}

//最後一組沒有可移動元素

//最大值

cout << " 無 ";

//輸出數值

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

cout << " ";

//輸出方向

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

cout << endl;

}//判斷是否存在 可以移動元素

bool judge_move(init* n_n, int n)

judge = true;}}

}else if (i == n - 1)

judge = true;}}

}//向左

else if (n_n[i].dir == 1 && n > 1)

judge = true;}}

//向右

else if (n_n[i].dir != 1 && n > 1)

judge = true;}}

}return judge;

}

君生我未生,我生君已老

君生我未生,我生君已老。君恨我生遲,我恨君生早。恨不生同時,日日與君好。我生君未生,君生我已老。我離君天涯,君隔我海角。我生君未生,君生我已老。化蝶去尋花,夜夜棲芳草。我不知道我是以何種感情把這詩看下去的。只是在看的時候想起你,然後莫名流淚。故事還要從那個炎熱的五月說起,從那個充滿紙醉金迷的上海說起...

君生我未生 我生君已老

你在歡笑,體會童年的快樂的時候,我還沒出現,準確的說,我爸和我媽剛好上 你拿著課本認真學習的時候,我剛剛來到這個世界上,剛剛學會啼哭.看見你曾經的舊照,覺得我們的時代感拉遠了不少,也就幾年而已,感覺你比我多過了幾個世紀。嘴角上揚的時候,是你最帥的樣子,我忍不住想多看你幾眼,又害怕被你發現,又害怕別人...

既生 Redis 何生 LevelDB ?

了解 redis 的同學都知道它是乙個純記憶體的資料庫,憑藉優秀的併發和易用性打下了網際網路項的半壁江山。redis 之所以高效能是因為它的純記憶體訪問特性,而這也成了它致命的弱點 記憶體的成本太高。所以在絕大多數場合,它比較適合用來做快取,長期不被訪問的冷資料被淘汰掉,只有熱的資料快取在記憶體中,...