• 交换地方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

  • 相关阅读:
    JavaScript 垃圾回收
    JavaScript 跳坑指南
    javaScript AJAX
    高效 JavaScript
    Java使用 Thumbnails 压缩图片
    Vue前端压缩图片
    JS input输入框字数超出长度显示省略号.....
    Vue图片浏览组件vviewer使用
    浏览器获取京东cookie
    图片在容器内水平垂直居中显示
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3052185.html
Copyright © 2020-2023  润新知