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個皇后,每行乙個並使其不能互相攻擊 同一行 同一列 同一斜線上的皇后都會自動攻擊 回溯演算法也叫試探法,它是一種系統地搜尋問題的解的方法。回溯演算法的基本思想是 從一條路往前走,能進則進,不能進則退回來,換一條路再試。在現實中,有很多問題往往需要...
兩個組合優化問題及演算法
最近看到兩道程式設計題,有點意思,不過網上看了一下,雖然有一些人寫出了演算法,但是感覺演算法思想表述的都不夠清晰,特別是都是直接上結論,然後證明這麼做是對的。我不大喜歡這種表述方式,嘗試著以更容易理解的 順向思維 沒錯,不是什麼 逆向思維 就是正常的思路來推導一下求解過程.把陣列排成最小的數 輸入乙...