zoukankan      html  css  js  c++  java
  • DFS

    常用到vis数组做标记

    一般形式:
    DFS(某状态){
    如果搜出一种结果 返回;
    在所有能做出的选择中{
    做出该选择并记录该选择做过;
    DFS(选择后的状态)
    取消该选择以及对该选择的记录;
    }
    }

    • 一、 全排列
      输入n,按字典输出所有1-n的全排列,n不超过10
      输入3,输出{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}
    #include<iostream>
    #include<vector>
    using namespace std;
    int n;
    vector<int> ans;
    void show(){
    	for(int i=0;i<ans.size();i++){
    		printf("%5d",ans[i]);
    	}
    	cout<<endl;
    	return;
    }
    int vis[12];
    void dfs(int num){
    	if(num==n+1){
    		show();
    		return;
    	}
    	for(int i=1;i<=n;i++){
    		if(!vis[i]){
    			ans.push_back(i);
    			vis[i]=1;
    			dfs(num+1);
    			ans.pop_back();
    			vis[i]=0;
    		}
    	}
    }
    int main(){
    	cin>>n;
    	dfs(1);
    	return 0; 
    }
    
    • 二、 next_permutation
      生成下一个全排列并判断是否生成了所有n!个排列
    #include<iostream>
    #include<vector>
    #include<algorithm>
    using namespace std;
    int n;
    vector<int> ans;
    void show(){
    	for(int i=0;i<ans.size();i++){
    		printf("%5d",ans[i]);
    	}
    	cout<<endl;
    	return;
    }
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		ans.push_back(i);
    	}
    	do{
    	   show();	
    	}while(next_permutation(ans.begin(),ans.end()));
    	return 0;
    }
    
    • 三、 子集合
      {1 ,2,3}需输出{ },{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}
      N个元素的子集有2^n个
    #include<iostream>
    #include<vector>
    using namespace std;
    int n;
    vector<int> ans;
    void show(){
    	for(int i=0;i<ans.size();i++){
    		printf("%5d",ans[i]);
    	}
    	cout<<endl;
    	return;
    }
    void dfs(int num){
    	if(num==n+1){
    		show();
    		return;
    	}
    	ans.push_back(num);
    	dfs(num+1);
    	ans.pop_back();//选 
    	dfs(num+1);//不选 
    	return;
    }
    int main(){
    	cin>>n;
    	dfs(1);
    	return 0;
    }
    
    ljm要加油
  • 相关阅读:
    图论复习
    数据结构复习
    数学复习
    字符串算法复习
    还有9天就要走了
    JS 多个一维数组排例组合的所有可能
    PHP 多个一维数组排列组合的所有可能
    维护DOWNID
    LINUX
    Multiple Versions of PHP run on server
  • 原文地址:https://www.cnblogs.com/ljmmm1/p/15563871.html
Copyright © 2011-2022 走看看