2017.4.20 火星人 思考记录

来源:互联网 发布:ubuntu中怎么安装jdk 编辑:程序博客网 时间:2024/06/05 23:00

        这是一个固定起点的搜索、、

        对于固定的起点,只需要打个标记,已辨别这是不是开始的第一个循环(因为只有开始的第一遍循环需要从给定的位置开始,其他的都是从1开始)


       码:

#include<iostream>#include<cstdio>using namespace std;int wei[10001],cnt=-1,n,m,i;bool shuru[10001],yong[10001],jieshu;void dfs(int ceng){if(jieshu==1)return;if(ceng==n+1){++cnt;if(cnt==m){for(i=1;i<=n;i++)printf("%d ",wei[i]);jieshu=1;return ;}return ;}if(!shuru[ceng]){for(int i=wei[ceng];i<=n;i++) {if(!yong[i]){yong[i]=1;wei[ceng]=i;dfs(ceng+1);yong[i]=0;}     }shuru[ceng]=1;    }else     {     for(int i=1;i<=n;i++) {if(!yong[i]){yong[i]=1;wei[ceng]=i;dfs(ceng+1);yong[i]=0;}     } }}int main(){scanf("%d%d",&n,&m);for(i=1;i<=n;i++)scanf("%d",&wei[i]);dfs(1);}


0 0