HDU-1584-蜘蛛牌(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

#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
int a[20],b[20];
int Min;
void dfs(int k,int cnt)
{
    if(k>=Min)
    {
        return;
    }
    if(cnt==9)
    {
        Min=k;
        return ;
    }
    for(int i=1;i<10;i++)
    {
        if(b[i]==0)
        {
            b[i]=1;
            for(int j=i+1;j<=10;j++)///i要移动到i+1上,如果i+1已经移动,那么i+1已经在i+2上了
            {
                if(b[j]==0)
                {
                    dfs(k+abs(a[i]-a[j]),cnt+1);///注意cnt++是不行的,这个好理解一些吧,而且我又用了++cnt但也不行,这是为什么?求解答
                    break;
                }
            }
            b[i]=0;
        }
    }
}
int main()
{
    int t,c;
    scanf("%d",&t);
    while(t--)
    {
        Min=INF;
        memset(b,0,sizeof(b));
        for(int i=1;i<=10;i++)
        {
            scanf("%d",&c);
            a[c]=i;
        }
        dfs(0,0);
        printf("%d\n",Min);
    }
    return 0;
}

蜘蛛游戏• 授权方式:免费源码 • 运行环境:SDK • 源码大小:800 KB • 开发厂商:Home Page • 整理时间:2006-02-27 • 下载统计:19421 • 推荐等级: 版本:1.1.0作者:dujid 说明:http://pub.idr.gov.cn/dujid/projects/araneid---------------------运行 Araneid---------------------对于源文件下载包:1. 下载一个Java开发库,例如 J2sdk1.4.2 等版本,http://java.sun.com/ 上有;2. 编译所有的源文件;3. 复制 images 目录到程序运行目录,如果目录放置错误,程序会没有图像显示;4. 运行 dujid.araneid.Araneid(默认) 。对于发布包:1. 下载一个Java运行时,例如 J2re1.4.2 等版本,http://java.sun.com/ 上有;2. 执行 classes 目录中的 start.bat---------------------对于开发者---------------------程序在 Windows XP J2sdk 1.3 下开发,使用编辑器 JCreator 2.5 Pro源目录(src)中 araneid.jcw 是 JCreator 的工作空间文件。后来在 J2sdk1.4.2 下修正,使用编辑器 Intellij IDEA源目录(src)中 araneid.ipr 和 araneid_old.ipr 分别是 Intellij IDEA 3 和 Intellij IDEA 4 的工程文件。软件介绍“蜘蛛”游戏的目标是以最少的移动次数将十叠中所有最前面的都移走。 如要将十叠中所有最前面的都移走,请将从一列移到另一列,直到将一套从 K 到 A 依次排齐。当一组从 K 到 A 依次排齐时,这些就会被移走。 蜘蛛玩法 在“游戏”菜单上,单击“开局”。 “蜘蛛”用两副玩。新一局游戏开始时,发有十叠,每叠中只有一张正面朝上。其余的放在窗口右下角的五叠叠中;新一轮发时用这些。 移的方法是将从一个叠拖到另一个叠。移的规则如下: 可以将叠最底下的移到空叠。 可以将叠最底下移到值仅次于它的上,不论套或颜色如何。 可以像对待一张一样移动一组同样套、依序排好的。 准备新一轮发时,请单击“发”,或者单击窗口右下角的叠。 在新一轮发之前,每一叠中都必须有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值