DFS 蜘蛛纸牌(深度解析)

DFS 蜘蛛纸牌(深度解析)

蜘蛛纸牌

Problem Description

蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么这些牌也跟着一起移动,游戏的目的是将所有的牌按同一花色从小到大排好,为了简单起见,我们的游戏只有同一花色的10张牌,从A到10,且随机的在一行上展开,编号从1到10,把第i号上的牌移到第j号牌上,移动距离为abs(i-j),现在你要做的是求出完成游戏的最小移动距离。

Input

第一个输入数据是T,表示数据的组数。

每组数据有一行,10个输入数据,数据的范围是[1,10],分别表示A到10,我们保证每组数据都是合法的。

Output

对应每组数据输出最小移动距离。

Sample Input

1

1 2 3 4 5 6 7 8 9 10

Sample Output

9

***(

思路如下:

这一题 我们可以的 pos_card[],去存储 每张牌的位置,然后我们通过深搜 去遍历每一种 符合题意的移动的情况(理解不通直接看代码)。

题解如下:

#include

#include

#include

using namespace std;

int pos_card[15]; //用来存储某张牌的位置

int mark[15]; //用来做标记用的,

int min_sum; //用来记录最小的移动距离

void dfs(int k,int sum) //进行了k次对牌的移动操作,最当前小移动距离为sum

{

if(sum >= min_sum) //进行剪枝操作,如果当前最小移动距离sum 已经大于 之前 移动9张所用的最小移动的距离min_sum

return; //此时 这种深的情况 就没必要进行下去了

if(k == 9) //这里 k==9 时就可以 就有一种方案出现了,因为 已经把 移动了九张牌的位置放好了(10这张牌不可以被移动,所以只需要移动九张牌)

{

min_sum = sum;

}

for(int i=1;i<10;i++) //这里的 i 表示是牌上的数字(就是要被 移动的牌)

{

if(! mark[i]) //mark[i]=0 说明这张牌没有被移动过,那我们就可先选择 移动这张牌

{

mark[i] = 1; //设标记,表明该牌已经被移动过了,不能在被移到东了

for(int j=i+1;j<=10;j++) //这里的 j 表示 ,将i这张牌移动到 j 这张牌的上面(这里 有点难理解为什么是 “把i这张牌移到j牌上”,我们可能会想万一 j>i+1 ,这个时候 该次移动操作就不符合“把牌移到比她大1的牌上”的规则吗,)

{ //不必这样担心,因为如果 j>i+1,我们在这里假设 i = 2 ,j = 6 ;j为6说明 i=3,i=4,i=5 这三张牌已经被移动过了(因为此时的mark[3~5]=1,mark[6]=0),而且一定是这三张牌已经依照规则 先被移动到 6这张牌上面(这点一定要搞明白),

//此时 i这张牌要想有最小的位移 只能 被移到 6 这张牌的上面(因为在6这张牌的最上面为3这张牌)

if(! mark[j]) // mark[j] 为0 说明这张牌没有被移动过,知识又可能 有其他的牌移动到 这张牌的上面

{

dfs(k+1,sum+abs(pos_card[i] - pos_card[j]));

break; //这里的 break 也需要理解,这里的理解是 只要 i 这张牌 找到 一个 第一个放置位置,就不用再找放置位置了

}

}

mark[i] = 0; //回溯清除标记,进行下一种情况的尝试(这个需要自己理解)

}

}

}

int main()

{

int t;

cin>>t;

while(t--)

{

memset(mark,0,sizeof(mark));

min_sum = 1e9;

for(int i=1;i<=10;i++)

{

int temp;

cin>>temp;

pos_card[temp] = i; //pos_card[3] = 5; 3号牌的位置为5

}

dfs(0,0);

cout<

}

return 0;

}

DFS 蜘蛛纸牌(深度解析)的更多相关文章

《SEO深度解析——全面挖掘搜索引擎优化的核心秘密》

基本信息 作者: 痞子瑞 出版社:电子工业出版社 ISBN:9787121224041 上架时间:2014-2-28 出版日期:201 ...

[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析

[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...

第37课 深度解析QMap与QHash

1. QMap深度解析 (1)QMap是一个以升序键顺序存储键值对的数据结构 ①QMap原型为 class QMap模板 ②QMap中的键值对根据Key进行了排序 ③QMap中 ...

Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

一起来做webgame,《Javascript蜘蛛纸牌》

不得不说,做游戏是会上瘾的,这次带来的是win系统上的经典游戏<蜘蛛纸牌>,不能完美,但求一玩 移牌 0 次 Javascript game_蜘蛛纸牌 正在努力加载... // " ...

(转载)(收藏)OceanBase深度解析

一.OceanBase不需要高可靠服务器和高端存储 OceanBase是关系型数据库,包含内核+OceanBase云平台(OCP).与传统关系型数据库相比,最大的不同点, 是OceanBase是分布式 ...

Kafka深度解析

本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅 ...

java内存分配和String类型的深度解析

[尊重原创文章出自:http://my.oschina.net/xiaohui249/blog/170013] 摘要 从整体上介绍java内存的概念.构成以及分配机制,在此基础上深度解析java中的S ...

Unity加载模块深度解析(Shader)

作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二 ...

随机推荐

jquery 的animate 的transform

$(function(){ var t = 1000; $("#id").animate( {borderSpacing:180}, //180 指旋转度数 { step: fun ...

VS2017配置opencv-4.2.0详细步骤

VS2017配置opencv-4.2.0详细步骤 1.下载opencv的安装包并解压.下载网址https://sourceforge.net/projects/opencvlibrary/ 图1 ...

新建eclipse工作空间的常用设置

1.设置字体: Window->Preferences->(可以直接搜索font)General -> Appearance ->Colors and Fonts --> ...

R中character和factor的as.integer的不同

记录一个容易犯错的地方. 用chr标记的0~1变量可以变为整数0和1, 而用因子factor标记的变量转换为整数时总是从1开始. 如果不注意区分就会发生令自己困惑的错误.

Hadoop集群搭建(一)~虚拟机的创建

Hadoop集群的搭建包括,虚拟机系统的安装:安装JDK,Hadoop:克隆虚拟机:伪分布式的搭建:安装zookeeper:Hive:Hbae:Spark等等: 我将分为多篇文章来记录.这篇文章主要写 ...

DVWA(七):XSS(stored)存储型XSS攻击

存储型XSS : 存储XSS,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在.提交JS攻击代码存储到数据库然后再输出. low: 观察源码:

数据库事务ACID详解(转载)

转载自:http://blog.csdn.net/shuaihj/article/details/14163713 谈谈数据库的ACID 一.事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行 ...

C# 获取系统所有字体

获取已安装的所有字体列表 System.Drawing.FontFamily StringBuilder str = ); InstalledFontCollection fonts = new In ...

深度学习归一化:BN、GN与FRN

在深度学习中,使用归一化层成为了很多网络的标配.最近,研究了不同的归一化层,如BN,GN和FRN.接下来,介绍一下这三种归一化算法. BN层 BN层是由谷歌提出的,其相关论文为

docker系列详解<二>之常用命令

此篇我们以从docker运行一个tomcat为例,进行一下操作: 拉取镜像 查看镜像 创建容器 查看运行状态 进入退出容器 停止容器 重启容器 删除容器 删除镜像 1.拉取tomcat镜像: 1).查 ...

相关创意

关于静物摄影,精辟总结7点
365bet手机网址多少

关于静物摄影,精辟总结7点

📅 12-18 👁️ 1410
猲狙的意思
亚洲365bet备用

猲狙的意思

📅 10-21 👁️ 458
金刚石瓷砖的特点、优缺点及价格,你知道吗?
亚洲365bet备用

金刚石瓷砖的特点、优缺点及价格,你知道吗?

📅 01-22 👁️ 305
梦幻西游手游:9技能善恶吸血鬼值多少钱?网友称2200W金币不愁卖
国际足联世界杯红牌列表
亚洲365bet备用

国际足联世界杯红牌列表

📅 07-03 👁️ 9950
昆仑特曲十八年价格表,昆仑特曲酒价格18年来表现如何?
LOL暗影岛、恕瑞玛大区临时停机维护公告
365在线体育app下载

LOL暗影岛、恕瑞玛大区临时停机维护公告

📅 06-21 👁️ 1403
短款羽绒服配什么裤子?建议搭配这5条,遮肉显瘦又修身身材!