hdu1584 dfs的题目
来源:互联网 发布:会读字的软件 编辑:程序博客网 时间:2024/06/05 02:53
这个题目还是挺有意思的,回溯,剪枝。
就是枚举所有的移动的情况,然后找出最小的。
代码如下,有助于新人提高;
#include "stdio.h"#include "string"#include "stdlib.h"int min=10000;//初始化min,不停的更新,知道最后dfs的一定是最小值int dist[11];//位置标记数组int vis[11];//标记访问数组void dfs(int cur,int temp){ if(temp>min) return;//这个剪枝很重要很重要 否则11!哪有机器承受得了。 if(cur==9) min=temp;//更新 为什么不写if呢 原因是上边<span style="font-family: Arial, Helvetica, sans-serif;">if(temp>min) return; 已经说明了如果大了就直接回溯,如果能到这一步一定是min>temp。</span> for(int i=1;i<=9;i++) { if(!vis[i])//如果没有访问 { vis[i]=1;//标记访问 for(int k=i+1;k<=10;k++) if(!vis[k])//接下来这个,因为枚举出来所有的可能性,所以i的下一个i+1不一定在原位置,所以要通过找k来找到需要到哪个位置去。 { dfs(cur+1,temp+abs(dist[i]-dist[k])); break;//break很关键,遇到第一个!vis[k]一定就要跳出 } vis[i]=0; } } return;}int main(){ int n; scanf("%d",&n); while(n--) { min=10000;//记得要初始化 memset(vis,0,sizeof(vis));//初始化 for(int i=1;i<=10;i++) { int c;scanf("%d",&c); dist[c]=i;//这样很方便找出位置。 } dfs(0,0); printf("%d\n",min);//输出 } return 0;}
祝大家acm快乐
0 0
- hdu1584 dfs的题目
- HDU1584:蜘蛛牌(DFS)
- 【DFS】HDU1584蜘蛛牌
- hdu1584 蜘蛛牌dfs
- HDU1584 蜘蛛牌(DFS)
- hdu1584蜘蛛牌(dfs)
- hdu1584 蜘蛛牌(DFS)
- hdu1584
- hdu1584
- HDU1584 蜘蛛牌 [DFS简单题]
- hdu1584 蜘蛛牌(经典dfs)
- hdu1584 蜘蛛牌 --DFS & 区间DP
- HDU1584 蜘蛛牌(深搜DFS+剪枝)
- HDU1584(dfs回溯 或 区间dp)
- 简单题目的dfs模版
- DFS题目
- DFS 题目1114:神奇的口袋
- hdu 1241 最基本的DFS题目
- TaintDroid下载与编译(六):(常出现的error)
- 一道有趣的数组越界、循环问题
- 数独游戏
- 2648: SJY摆棋子/2716: [Violet 3]天使玩偶 K-D tree
- JavaScript变量类型
- hdu1584 dfs的题目
- 第三周项目一-个人所得税计算器
- Myeclipse中启动tomcat 端口被占用问题
- C#中String与StringBuilder的区别
- 通过代理更新UITableHeaderFooterView某一行数据时,如何获取更新哪一行的
- 这才刚刚开始
- mysql中日期时间型解析
- Caffe 代码解读之全连接层concat layer
- oracle11g64位安装和32位plsql的安装使用