我是靠谱客的博主 优秀天空,最近开发中收集的这篇文章主要介绍力扣 773. 滑动谜题 bfs \ A*,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

https://leetcode-cn.com/problems/sliding-puzzle/
在这里插入图片描述
思路:本质上还是bfs……但是数组不好计算哈希,我们可以把它转换为字符串,即按照从左到右、从上到下的顺序连接起来。这样交换操作和哈希操作都比较容易执行。

class Solution {
public:

    string getStr(const vector<vector<int>>& board)
    {
        string s;
        for(int i=0;i<2;i++)
            for(int j=0;j<3;j++)
                s+=board[i][j]+'0';
        return move(s);
    }

    int slidingPuzzle(vector<vector<int>>& board) {
        string target="123450",begin=getStr(board);
        if(begin==target)
            return 0;
        int dir[4]={1,3,-1,-3};
        unordered_map<string,int> step;
        queue<string> q;
        q.push(begin);
        step[begin]=0;
        while(!q.empty())
        {
            string s=move(q.front());
            q.pop();
            int pos=s.find('0');
            for(int i=0;i<4;i++)
            {
                if((pos==2&&i==0)||(pos==3&&i==2))
                    continue;
                int npos=pos+dir[i];
                if(npos>=0&&npos<6)
                {
                    string tmp=s;
                    swap(tmp[pos],tmp[npos]);
                    if(!step.count(tmp))
                    {
                        if(tmp==target)
                            return step[s]+1;
                        step[tmp]=step[s]+1;
                        q.push(move(tmp));
                    }
                }
            }
        }
        return -1;
    }
};

思路:这道题也可以用A*来做,预估函数可以使用每个位置的数字到目标位置的曼哈顿距离。不过懒得写了orz。

最后

以上就是优秀天空为你收集整理的力扣 773. 滑动谜题 bfs \ A*的全部内容,希望文章能够帮你解决力扣 773. 滑动谜题 bfs \ A*所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部