zoukankan      html  css  js  c++  java
  • 蜘蛛牌

    蜘蛛牌是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<iostream>
    #include<math.h> 
    using namespace std;
    int s,x[11],visit[11];
    
    void dfs(int n,int step)
    {
        int i,j,k;
        if(n==9)
        {
            if(step<s)
            s=step;
            return;
        }
        
        for(i=0;i<10;i++)
        if(!visit[i])
        for(j=i+1;j<10;j++)
        {
            if(!visit[j])
            {
                k=step+abs(x[i]-x[j]);
                if(k>=s)break;
                visit [i]=1;
                dfs(n+1,k);
                visit[i]=0;
                break;//注意 
            }
        }
    }
    
    int main()
    {
        int i,j,k,l,n,a;
        cin >> n;
        while(n--)
        {
            for(i=0;i<10;i++)
            cin>>a,x[a-1]=i,visit[i]=0;
            s=999999999;
            dfs(0,0);
            cout << s << endl;
        }
        return 0;
    }

    2018-11-29

  • 相关阅读:
    [刷题] 1016 部分A+B (15分)
    [刷题] 1022 D进制的A+B (20分)
    [刷题] 1021 个位数统计 (15分)
    [刷题] 1020 月饼 (25分)
    洛谷&BZOJ [POI2016]Korale
    反演魔术---二项式反演
    毒瘤养成记1: 如何卡hash
    多项式全家桶
    [CQOI]排序机械臂
    后缀自动机感性理解
  • 原文地址:https://www.cnblogs.com/DWVictor/p/10036724.html
Copyright © 2011-2022 走看看