穷举法
回溯法BackTracking:粉笔和绳子 DFS
DFS深度优先搜索 实现
//伪代码
procedure explore(G,v) //G图,v顶点
visited[v] = true //visited 就是粉笔
for each edge(v,u) in E:
if not visited[u]:
explore(G,u) //递归 -> 栈FILO(绳索)
procedure dfs(G) //初始化
for all v in V:
visited[v] = false
for all v in V:
visited[v] = false
for all v in V:
if not visited[v]:
explore(G,v)
//算法
//C[][]是图的邻接矩阵,visited[i]表示顶点i是否被访问过
for(i = 0;i <=n-1;i++){
visited[i] = 0;
}
DFSk(Graph g,int k) //对图g的顶点K进行深度遍历
{
visited[k] = 1;
visit k; //自定义visit函数
for(i = 0; i<= n-1;i++){
if(g.c[k][i] ==1 && visited[i] == 0) DFSk(g,i);
}
}
DFS(Graph g) //考虑g的连通性
{
for(int i = 0; i<=n-1;i++){
if(visited[i] ==0) DFSk(g,i);
}
}
0-1背包问题 / 普通背包问题
//回溯法算法框架
void backtr