深搜,亮点在那个剪枝,flag代表是否搜索数组从开始到当前一直等于原始数组同位置的数,如果是真,就从原始数组的当前位置的书开始搜,否则就从0开始搜。

见代码。

  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. using namespace std;
  5. int n,m,beg,origin[2003];
  6. int mp[103][103];
  7. bool vis[103][103];
  8. int cnt;
  9. int stk[2010];
  10. bool check()
  11. {
  12. int i;
  13. for(i=0;i<=m;i++)
  14. {
  15. if(stk[i]==origin[i])
  16. continue;
  17. if(stk[i]<origin[i])
  18. return false;
  19. if(stk[i]>origin[i])
  20. return true;
  21. }
  22. return false;
  23. }
  24.  
  25. void dfs(int bg,bool flag)
  26. {
  27. // cout<<cnt<<endl;
  28. if(cnt==m+1)
  29. {
  30. // for(int i=0;i<=m;i++)
  31. // cout<<stk[i]<<' ';
  32. // cout<<endl;
  33. if(stk[cnt-1]==beg&&check())
  34. {
  35. return;
  36. }
  37. else
  38. {
  39. return;
  40. }
  41. }
  42. for(int i=1;i<=n;i++)
  43. {
  44. if(flag&&i<origin[cnt])
  45. continue;
  46. if(mp[bg][i]&&!vis[bg][i])
  47. {
  48. vis[bg][i]=true;
  49. vis[i][bg]=true;
  50. stk[cnt++]=i;
  51. dfs(i,flag&&i==origin[cnt-1]);
  52. // cout<<stk[cnt]<<endl;
  53. if(cnt==m+1&&stk[cnt-1]==beg&&check())
  54. return;
  55. // cout<<" "<<cnt<<endl;
  56. cnt--;
  57. // cout<<" "<<cnt<<endl;
  58. vis[bg][i]=false;
  59. vis[i][bg]=false;
  60. }
  61. }
  62. return;
  63. }
  64. int main()
  65. {
  66. cin>>n>>m;
  67. int i;
  68. cnt=1;
  69. memset(mp,0,sizeof(mp));
  70. memset(vis,false,sizeof(vis));
  71. cin>>origin[0];
  72. beg=origin[0];
  73. for(i=1;i<=m;i++)
  74. {
  75. cin>>origin[i];
  76. mp[origin[i-1]][origin[i]]=1;
  77. mp[origin[i]][origin[i-1]]=1;
  78. }
  79. //// for(i=1;i<=n;i++)
  80. ////// {
  81. ////// for(int j=1;j<=n;j++)
  82. ////// cout<<mp[i][j]<<' ';
  83. ////// cout<<endl;
  84. //// }
  85. stk[0]=beg;
  86. dfs(beg,true);
  87. // cout<<cnt<<endl;
  88. if(cnt==m+1)
  89. {
  90. for(i=0;i<=m;i++)
  91. cout<<stk[i]<<' ';
  92. cout<<endl;
  93. }
  94. else
  95. cout<<"No solution"<<endl;
  96. return 0;
  97. }

  

练手CF3-C - Wormhouse的更多相关文章

  1. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  2. Cocos2d-Lua (练手) 微信打飞机

    学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西.   一.子弹效果          子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...

  3. web前端学习部落22群分享给需要前端练手项目

    前端学习还是很有趣的,可以较快的上手然后自己开发一些好玩的项目来练手,网上也可以一抓一大把关于前端开发的小项目,可是还是有新手在学习的时候不知道可以做什么,以及怎么做,因此,就整理了一些前端项目教程, ...

  4. webpack练手项目之easySlide(三):commonChunks(转)

    Hello,大家好. 在之前两篇文章中: webpack练手项目之easySlide(一):初探webpack webpack练手项目之easySlide(二):代码分割 与大家分享了webpack的 ...

  5. webpack练手项目之easySlide(二):代码分割(转)

    在上一篇 webpack练手项目之easySlide(一):初探webpack  中我们一起为大家介绍了webpack的基本用法,使用webpack对前端代码进行模块化打包. 但是乍一看webpack ...

  6. webpack练手项目之easySlide(一):初探webpack (转)

    最近在学习webpack,正好拿了之前做的一个小组件,图片轮播来做了下练手,让我们一起来初步感受下webpack的神奇魅力.     webpack是一个前端的打包管理工具,大家可以前往:http:/ ...

  7. JAVA大数类练手

    今天突然看到了OJ上的大数类题目,由于学习了一点大数类的知识.果断水了6道题......都是非常基础的.就当的练手的吧. 学到的只是一些大数类的基本操作.以后多做点这样的题,争取熟练运用水大数题... ...

  8. Python之路【第二十四篇】:Python学习路径及练手项目合集

      Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...

  9. node论坛练手

    当时学node,自己写了个论坛练手,现在看还是有很多问题,有时间好好改改 https://github.com/hitbs228/countdown

  10. 【开源】前端练手笔记,Chrome扩展应用程序(html+CSS+JS) (1)

    项目名称:github-notification 项目地址:https://github.com/WQTeam/github-notification 说明:本人打算抽时间学习前端(html + cs ...

随机推荐

  1. [BI基础] ( 商务智能 ) 简介

    一.什么是BI BI(商务智能)通过给海量云数据制定“游戏规则”(对不同主题进行不同分析),将分散的数据进行搜集.整合.清理和诊断,借助一定的分析手段,进而将数据转化为信息和知识,快速准确的提供报表并 ...

  2. python 基础学习(字典对象,set对象)

    1.dict 字典对象 a.定义对象 d={'a':14,'b':12}b.通过key获取value d['a'] 方法1.判断key是否存在 if 'a' in d: d['a']方法2:通过用ge ...

  3. Qt之QSequentialAnimationGroup

    简述 QSequentialAnimationGroup类提供动画的串行组. QSequentialAnimationGroup是一个串行运行动画的QAnimationGroup,在另一个动画播放结束 ...

  4. [译]Quartz 框架 教程(中文版)2.2.x 之第一课 开始使用Quartz框架

    第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可 ...

  5. C语言知识整理(1):简介

    由于项目要求,需要学习iOS移动端开发.iOS开发的核心语言是Objective-C,Objective-C是在C语言的基础加了一层面向对象的语法.为了能够更好地掌握Objective-C,故先学习C ...

  6. Vim经典讲解

    http://blog.csdn.net/niushuai666/article/details/7275406

  7. myeclipse中java文件中文注释乱码问题

    在myeclipse中,有时打开java文件会发现中文注释全为乱码了,这个问题主要是因为编码的问题没有设置好,一个重要的原则就是保证所有的编码一致才不会发生乱码 出现乱码,需要知道三个地方的编码格式: ...

  8. 使用Matrix控制图像或组件变换的步骤

    1.获取Matrix对象,该Matrix对象既可新创建,也可直接获取其他对象内封装的Matrix(例如Transformation对象内部) 2.调用Matrix的方法进行平移.旋转.缩放.倾斜等. ...

  9. 常用的JavaScript验证正则表达式1

    匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*评注:表单验证时很实用 匹配网址URL的正则表达式:[a-zA-z]+://[^s]* 评注:网 ...

  10. tableview 刷新 @property属性的用法

    1.tableView的刷新1> 数据刷新的总体步骤* 修改模型数据* 刷新表格(刷新界面) 2> 刷新表格(刷新界面)的方法* 全局刷新(每一行都会重新刷新)- (void)reload ...