兩個古老問題的遞迴演算法。

2021-05-27 20:29:35 字數 1047 閱讀 8874

1. 全排列

思路1:遞迴分治(基於交換)

#include void perm(int* a, int start, int end);

void swap(int& m, int& n);

void output(const int* a, int size);

int main() ;

perm(a, 0, 5);

return 0;

}void perm(int* a, int start, int end) else }}

void swap(int& m, int& n)

void output(const int* a, int size)

printf("\n");

}

思路2:剪枝回溯

#include void perm(int* data, int* buf, int start, int end);

void output(const int* a, int size);

int main() ;

int buf[5] = ;

perm(data, buf, 0, 5);

return 0;

}void perm(int* data, int* buf, int start, int end) else }}

void output(const int* a, int size)

printf("\n");

}

2. 漢諾塔

#include void hanoi(int n, char a, char b, char c);

void move(int n, char from, char to);

int main()

void hanoi(int n, char a, char b, char c)

}void move(int n, char from, char to)

兩個有趣的演算法問題

2019年2月19日註 這篇文章原先發在自己github那邊的部落格,時間是2017年2月5日 一共是兩道題,第一道是上學期的matlab考試的時候碰到的,另外一道是師弟發的一道數學題的學習筆記,於是找了個時間想了一下,結合網上找到的資料參考。用的是matlab語言。1.乙隻青蛙,每次可以選擇跳1級...

八皇后問題的兩個高效的演算法(回溯與遞迴)

八皇后問題是乙個經典的問題,在乙個n n的棋盤上放置n個皇后,每行乙個並使其不能互相攻擊 同一行 同一列 同一斜線上的皇后都會自動攻擊 回溯演算法也叫試探法,它是一種系統地搜尋問題的解的方法。回溯演算法的基本思想是 從一條路往前走,能進則進,不能進則退回來,換一條路再試。在現實中,有很多問題往往需要...

兩個組合優化問題及演算法

最近看到兩道程式設計題,有點意思,不過網上看了一下,雖然有一些人寫出了演算法,但是感覺演算法思想表述的都不夠清晰,特別是都是直接上結論,然後證明這麼做是對的。我不大喜歡這種表述方式,嘗試著以更容易理解的 順向思維 沒錯,不是什麼 逆向思維 就是正常的思路來推導一下求解過程.把陣列排成最小的數 輸入乙...