voiddfs(int u, int vex){
visit[u]=true;for(int v=1;v<=vex;++v){if(visit[v]==false&&G[u][v]!=inf){dfs(v, vex);}}}
求图中任意两点长度是L的所有路径
voiddfs(int u, int des, int L, int height){if(L+1==height){if(u==des){
path.push_back(u);
result.push_back(path);
path.pop_back();}return;}
visit[u]=true;// u加入path中
path.push_back(u);for(int v=1;v<=vex;++v){if(G[u][v]!=inf&&visit[v]==false){dfs(v, des,L, height+1);}}
visit[u]=false;
path.pop_back();}
知乎上的回溯模版
result =[]
def backtrack(路径, 选择列表):if 满足结束条件:
result.add(路径)return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
int vex, edge;
int G[1010][1010];
int indegree[1010];
bool topSort(){// 为讨论方便假设顶点编号从1...vex
queue<int> q;for(int i=1;i<=vex;++i){if(indegree[i]==0){
q.push(i);}}
int cnt=0;// 记录出队列次数 while(!q.empty()){
int u = q.front();
q.pop();for(int v=1;v<=vex;++v){if(G[u][v]!=inf){--indegree[v];if(indegree[v]==0){
q.push(v);}}}++cnt;}if(cnt<vex)returntrue;returnfalse;}