1.前n个自然数的所有排列:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. int count=,n;
  8. bool *b;
  9. int *a;
  10.  
  11. void dfs(int);
  12.  
  13. int main()
  14. {
  15. scanf("%d",&n);
  16. b=new bool[n+];
  17. a=new int[n+];
  18. memset(b,,n+);//这里不能写sizeof(b),b为变量指针
  19. dfs();
  20. return ;
  21. }
  22. void dfs(int t)
  23. {
  24. for(int i=;i<=n;i++)
  25. {
  26. if(b[i]) continue;
  27. b[i]=;
  28. a[t]=i;
  29. if(t==n)
  30. {
  31. printf("%d ",count++);
  32. for(int j=;j<=n;j++) printf("%d",a[j]);
  33. puts("");
  34. b[i]=;
  35. return;
  36. }
  37. dfs(t+);
  38. b[i]=;
  39. }
  40. }

2.迷宫是否有通路(dfs):

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. const int N=;
  8. char mi_gong[N][N];
  9. bool b[N][N];
  10. int dx[]={,-,,},dy[]={,,,-};
  11. int n,m,x1,x2,y1,y2;
  12. bool bb;
  13.  
  14. void Create();
  15. bool CanMove(int x,int y);
  16. void Dfs(int x,int y,int step);
  17.  
  18. int main()
  19. {
  20. Create();
  21. Dfs(x1,y1,);
  22. if(bb==) puts("小老鼠出不来,被憋死了。");
  23. return ;
  24. }
  25. void Create()
  26. {
  27. puts("请输入迷宫的行列数以及小老鼠的起点和终点,然后再输入迷宫每个格点,.代表可以走,#代表不可以走。");
  28. scanf("%d%d%d%d%d%d",&n,&m,&x1,&y1,&x2,&y2);
  29. for(int i=;i<=n;i++)
  30. {
  31. getchar();
  32. for(int j=;j<=m;j++)
  33. {
  34. scanf("%c",&mi_gong[i][j]);
  35. }
  36. }
  37. }
  38. bool CanMove(int x,int y)
  39. {
  40. return x>&&x<=n&&y>&&y<=m&&mi_gong[x][y]=='.'&&b[x][y]==;
  41. }
  42. void Dfs(int x,int y,int step)
  43. {
  44. if(bb) return;
  45. if(x==x2&&y==y2)
  46. {
  47. puts("小老鼠可以走出迷宫。");
  48. bb=;
  49. return;
  50. }
  51. int tx,ty;
  52. b[x][y]=;
  53. for(int i=;i<;i++)
  54. {
  55. tx=x+dx[i];
  56. ty=y+dy[i];
  57. if(CanMove(tx,ty)) Dfs(tx,ty,step+);
  58. }
  59. b[x][y]=;
  60. }

3.给出n个正整数a1,a2,a3,...,an,和一个正整数k,问是否能从n个数中选出若干个数,使其和为k:

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. bool ans;
  8. int n,k,*a,*s;
  9. void dfs(int i,int sum);
  10.  
  11. int main()
  12. {
  13. scanf("%d%d",&n,&k);
  14. a=new int[n];
  15. s=new int[n];
  16. for(int i=;i<n;i++) scanf("%d",&a[i]);
  17. int s0=;
  18. for(int i=n-;i>=;i--) s0+=a[i],s[i]=s0;
  19. dfs(,);
  20. if(ans) cout<<"true";
  21. return ;
  22. }
  23. void dfs(int i,int sum)
  24. {
  25. if(ans||sum>k||sum+s[i]<k) return;
  26. if(i==n)
  27. {
  28. if(sum==k) ans=true;
  29. return;
  30. }
  31. dfs(i+,sum+a[i]);
  32. dfs(i+,sum);
  33. }

dfs小练 【dfs】的更多相关文章

  1. 随手练——DFS小练

    1. 单词接龙 https://www.luogu.org/problemnew/show/P1019 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头 ...

  2. 洛谷P1120小木棍[DFS]

    题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...

  3. 何时使用hadoop fs、hadoop dfs与hdfs dfs命令(转)

    hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...

  4. 何时使用hadoop fs、hadoop dfs与hdfs dfs命令

    hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...

  5. js 计时器小练-20160601

    今天要做一个计时器小练,所以我就做了练习,代码如下. // 初始化时间,以及定义全局量去接收计时器 var timer = 0; var t; var h, min, sec, millisec; / ...

  6. Hadoop:hadoop fs、hadoop dfs与hdfs dfs命令的区别

    http://blog.csdn.net/pipisorry/article/details/51340838 'Hadoop DFS'和'Hadoop FS'的区别 While exploring ...

  7. hadoop fs、hadoop dfs与hdfs dfs的区别

    不多说,直接上干货! hadoop fs:    使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs :   只能操作HDFS文件系统相关(包括与Local FS间的操作),前 ...

  8. Hadoop点滴-何时使用hadoop fs、hadoop dfs与hdfs dfs命令

    何时使用hadoop fs.hadoop dfs与hdfs dfs命令 编辑 删除 hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件 ...

  9. hadoop fs、hadoop dfs与hdfs dfs命令的区别

    Hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...

随机推荐

  1. [转]NuGet 包升级

    Update-Package 在 NuGet 的命令控制台执行这个就会升级所有 NuGet 包,不带参数. 使用 VS2015 时,插件 Web Extension Pack 2015 和 Web.E ...

  2. centos 7.5 安装mysql

    1.Mysql: 在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1.下载并安装MySQL官 ...

  3. [UE4]事件代理,无输出参数,蓝图中不需要绑定

    .h UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName = "LoginSuccess")) void LoginS ...

  4. td高度不随内容变化display:block;display:block;display:block;display:block;display:block;

    在TD里加个DIV就可以解决!CSS对应改成#aaa td div{ height:236px; overflow:hidden; 在TD里加个DIV就可以解决!CSS对应改成#aaa td div{ ...

  5. eclipse在线安装jd反编译插件

    eclipse在线安装jd反编译插件地址 http://jd.benow.ca/jd-eclipse/update

  6. application/xml 和 text/xml的区别

    application/xml and text/xml的区别 经常看到有关xml时提到"application/xml" 和 "text/xml"两种类型, ...

  7. ie6 双边距问题

    div 设置float和margin margin在float方向上会变成设置值的两倍 解决方法,加上css _display:inline

  8. ftps加密服务器

    咱不废话,理论不提,直接上步骤,[linux下的ftps服务器系统搭建步骤如下,按此步骤,即可搭建ftps服务器系统] 1.[安装vsftpd] yum -y install vsftpd 2.[安装 ...

  9. 在Apache下开启SSI配置

    开启SSI:html.shtml页面include网页文件 使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为&quo ...

  10. javascript 浮点数加减乘除计算会有问题, 整理了以下代码来规避这个问题

    /* * js数学计算 add by yan */ /** ** 加法函数,用来得到精确的加法结果 ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显.这个函数返回较 ...