思路和步驟:
將數字賦予方向屬性
理解什麼叫可移動方向(後面在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 之所以高效能是因為它的純記憶體訪問特性,而這也成了它致命的弱點 記憶體的成本太高。所以在絕大多數場合,它比較適合用來做快取,長期不被訪問的冷資料被淘汰掉,只有熱的資料快取在記憶體中,...