zoukankan      html  css  js  c++  java
  • 交换地方HDU 1195 Open the Lock 简单搜索bfs

    题记:写这篇博客要主是加深自己对交换地方的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。

        标题址地: http://acm.hdu.edu.cn/showproblem.php?pid=1195

        一个标准的宽搜,一点不须要剪枝

        须要意注的一点是:交换的时候,这个地方只能交换街坊,我时当看错为以可以意任交换

        代码如下:

        每日一道理
    人生是洁白的画纸,我们每个人就是手握各色笔的画师;人生也是一条看不到尽头的长路,我们每个人则是人生道路的远足者;人生还像是一块神奇的土地,我们每个人则是手握农具的耕耘者;但人生更像一本难懂的书,我们每个人则是孜孜不倦的读书郎。
    #include <iostream>
    #include <queue>
    using namespace std;
    
    int a[5],b[5];
    bool visit[10010];
    int hashb;
    
    struct xh
    {
        int d[5];
        int t;
    }w,ww;
    
    int hash(int x[])
    {
        int i,sum=0;
        for(i=1;i<=4;i++)
            sum=sum*10+x[i];
        return sum;
    }
    
    int add(int n)
    {
        if(n==9)
            return 1;
        return n+1;
    }
    
    int jian(int n)
    {
        if(n==1)
            return 9;
        return n-1;
    }
    
    int bfs()
    {
        int i,j,hashx;
        memset(visit,false,sizeof(visit));
        queue<xh>q;
        for(i=1;i<=4;i++)
            w.d[i]=a[i];
        w.t=0;
        hashx=hash(a);
        visit[hashx]=true;
        q.push(w);
        while(!q.empty())
        {
            ww=q.front();
            q.pop();
            if(hash(ww.d)==hashb)
            {
                printf("%d\n",ww.t);
                break;
            }
            //加一减一
            for(i=1;i<=4;i++)
            {
                w=ww;//加一
                w.d[i]=add(w.d[i]);
                hashx=hash(w.d);
                if(!visit[hashx])
                {
                    visit[hashx]=true;
                    w.t++;
                    q.push(w);
                }
    
                w=ww;//减一
                w.d[i]=jian(w.d[i]);
                hashx=hash(w.d);
                if(!visit[hashx])
                {
                    visit[hashx]=true;
                    w.t++;
                    q.push(w);
                }
            }
            //交换,这个地方只能交换街坊,我时当看错了标题
            for(i=1;i<4;i++)
            {
                w=ww;
                swap(w.d[i],w.d[i+1]);
                hashx=hash(w.d);
                if(!visit[hashx])
                {
                    visit[hashx]=true;
                    w.t++;
                    q.push(w);
                }
            }
        }
    }
    
    int main()
    {
        int i,j,n,T;
        char c;
        cin>>T;
        while(T--)
        {
            for(i=1;i<=4;i++)
            {
                cin>>c;
                a[i]=c-'0';
            }
            for(i=1;i<=4;i++)
            {
                cin>>c;
                b[i]=c-'0';
            }
            hashb=hash(b);
            bfs();
        }
        return 0;
    }

        
     

    文章结束给大家分享下程序员的一些笑话语录: 手机终究会变成PC,所以ip会比wm更加畅销,但是有一天手机强大到一定程度了就会发现只有wm的支持才能完美享受。就好比树和草,草长得再高也是草,时间到了条件成熟了树就会窜天高了。www.ishuo.cn

  • 相关阅读:
    20155215 第二周测试1 与 myod
    2017-2018-1 20155215 《信息安全系统设计基础》第1周学习总结
    第十四周 P187教材检查
    数据库1 实验代码和截图补交
    20155215 2016-2017-2《Java程序设计》课程总结
    20155215 宣言 实验五 网络编程与安全 实验报告
    实验MyOD
    Alpha冲刺——代码规范与计划
    您为何会咸鱼———项目系统设计与数据库设计
    您为何会咸鱼——团队 Gitee 实战训练
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3052185.html
Copyright © 2011-2022 走看看