本文共 9520 字,大约阅读时间需要 31 分钟。
1.数的全排列(最基础的dfs回溯)
/********************************************** *Author* :coderdz *Created Time* : 2019/1/7 23:31:48*********************************************/#include #include #include #include #include #include #include #include
python版
def dfs(x): if x>n: for i in range (1,n): print(a[i],end=' ') print(a[n]) else: for i in range(1, n+1): if vis[i]==0: vis[i]=1 a[x]=i dfs(x+1) vis[i]=0n=int(input())vis=[0]a=[0]for i in range(1,n+1): vis.append(0)for i in range(1,n+1): a.append(0)dfs(1)
2.汉诺塔(个人觉得最难理解的递归问题之一)
求出对于不同的n(盘块个数)的移动方法
#include int cnt=0;void move(int id,char a,char c){//打印移动方式:哪个盘子怎么移动? printf("step %d :move %d from %c ---> %c\n",++cnt,id,a,c);}void solve_hanno(int n,char a,char b,char c){//递归过程 if (n==1) move(n,a,c); else{ solve_hanno(n-1,a,c,b); move(n,a,c); solve_hanno(n-1,b,a,c); }}int main(){ int n; scanf("%d",&n); solve_hanno(n,'A','B','C'); return 0;}
python版
def move(n,a,c): global cnt #定义cnt全局变量,可进行读写 cnt+=1 print('step %d: move %d from %c ---> %c' % (cnt,n,a,c)) def solve_hanno(n,a,b,c): if n==1: move(n,a,c) else: solve_hanno(n-1,a,c,b) move(n,a,c) solve_hanno(n-1,b,a,c)n=int(input())cnt=0solve_hanno(n,'A','B','C')
3.八皇后问题(经典dfs回溯)
/********************************************** *Author* :coderdz *Created Time* : 2019/1/17 21:51:00*********************************************/#include #include #include #include #include #include #include #include
4.迷宫问题(bfs遍历)
输入一个字符迷宫矩阵,'.'代表可以通过,'#'代表不能通过,S为起点,G为终点,计算起点到终点的最短距离
/********************************************** *Author* :coderdz *Created Time* : 2019/1/7 23:31:48*********************************************/#include #include #include #include #include #include #include #include
5.最短路之floyed算法
O(n^3),多源最短路径
/********************************************** *Author* :coderdz *Created Time* : 2019/1/7 23:31:48*********************************************/#include #include #include #include #include #include #include #include
6.最短路之Dijkstra算法
O(n^2),单源最短路径,不能处理负边权
/********************************************** *Author* :coderdz *Created Time* : 2019/1/7 23:31:48*********************************************/#include #include #include #include #include #include #include #include
7.最短路之SPFA算法
队列优化的Bellman-Ford算法,单源最短路,负权值但无环状图,O(KE)
/********************************************** *Author* :coderdz *Created Time* : 2019/1/18 16:39:22*********************************************/#include #include #include #include #include #include #include #include
8.最小生成树(Kruskal算法)
适用于稀疏图
/********************************************** *Author* :coderdz *Created Time* : 2019/1/19 15:07:16*********************************************/#include #include #include #include #include #include #include #include
9.并查集
/********************************************** *Author* :coderdz *Created Time* : 2019/1/19 14:19:26*********************************************/#include #include #include #include #include #include #include #include
10.树状数组(BIT)
能够完成下述操作的数据结构j(优点是速度快):
给定初始值全为0的数列a1,a2,a3,·····,an
1)给定i,计算a1+a2+···+ai
2)给定ai和x,执行ai+=x
/********************************************** *Author* :coderdz *Created Time* : 2019/1/19 21:40:52树状数组*********************************************/#include #include #include #include #include #include #include #include
转载地址:http://yefqb.baihongyu.com/