【DFS】HDU1584蜘蛛牌
来源:互联网 发布:汽车cae分析软件 编辑:程序博客网 时间:2024/04/29 21:04
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1584
Problem Description
蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好,为了简单起见,我们的游戏只有同一花色的10张牌,从A到10,且随机的在一行上展开,编号从1到10,把第i号上的牌移到第j号牌上,移动距离为abs(i-j),现在你要做的是求出完成游戏的最小移动距离。
Input
第一个输入数据是T,表示数据的组数。
每组数据有一行,10个输入数据,数据的范围是[1,10],分别表示A到10,我们保证每组数据都是合法的。
每组数据有一行,10个输入数据,数据的范围是[1,10],分别表示A到10,我们保证每组数据都是合法的。
Output
对应每组数据输出最小移动距离。
Sample Input
11 2 3 4 5 6 7 8 9 10
Sample Output
9
代码:
#include<iostream>#include<algorithm>using namespace std;int vis[15];int a[15];int ans;void dfs(int cnt,int tmp){ if(tmp>ans) return ; if(cnt==9){ ans=tmp; return; } for(int i=1;i<10;i++){ // 枚举没有移动的牌面; if(!vis[i]){ vis[i]=1; for(int j=i+1;j<=10;j++){ // 牌面为i的只能移在牌面为i+1的位置,但是这个牌可能移在后面了 if(!vis[j]){ // 只进入第一个没有被移动的牌面; dfs(cnt+1,tmp+abs(a[i]-a[j])); break; } } vis[i]=0; // 回溯; } }}int main(){ int t,x; cin.sync_with_stdio(false); cin>>t; while(t--){ for(int i=1;i<=10;i++){ cin>>x; a[x]=i; // x存在第i个位置; } ans=1<<29; dfs(0,0); cout<<ans<<endl; } return 0;}
1 0
- HDU1584:蜘蛛牌(DFS)
- 【DFS】HDU1584蜘蛛牌
- hdu1584 蜘蛛牌dfs
- HDU1584 蜘蛛牌(DFS)
- hdu1584蜘蛛牌(dfs)
- hdu1584 蜘蛛牌(DFS)
- HDU1584 蜘蛛牌 [DFS简单题]
- hdu1584 蜘蛛牌(经典dfs)
- hdu1584 蜘蛛牌 --DFS & 区间DP
- HDU1584 蜘蛛牌(深搜DFS+剪枝)
- HDU1584 蜘蛛牌
- HDU1584蜘蛛牌
- hdu1584 蜘蛛牌
- HDU1584蜘蛛牌
- hdu1584蜘蛛牌DP
- HDU1584~蜘蛛牌(深搜)
- HDU1584:蜘蛛牌(区间dp)
- HDOJ1584蜘蛛牌【DFS】
- SQL存储过程总结
- Oracle学习笔记(十五)——数据库(表)的逻辑备份与恢复
- 千里之行始于足下
- 如何搭建LNMP环境
- 【Android 应用开发】GitHub 优秀的 Android 开源项目
- 【DFS】HDU1584蜘蛛牌
- java.线程的五个状态与之间的切换
- POJ-1942 Paths on a Grid
- 高级搜索题集
- POJ 2488 A Knight's Journey
- modelsim-win64-10.1c 下载、安装、破解全攻略
- 图像分割—基于图的图像分割(Graph-Based Image Segmentation)
- 万年历(含农历)
- NKOI 2151 烽火传递