zoukankan      html  css  js  c++  java
  • AcWing 845. 八数码

    https://www.acwing.com/problem/content/847/

    #include<bits/stdc++.h>
    using namespace std;
    int bfs(string start)
    {
        string end="12345678x";
        queue<string>q;  
        unordered_map<string,int>d;  //距离数组 
        q.push(start);  // 先把start放进去 
        d[start]=0;  //起点到起点的距离为0 
        int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
        while(q.size())
        {
            auto t=q.front();   
            q.pop();
            int distance =d[t];
            if(t==end) return distance;  //判断t是否为终点  如果是  就结束 
            //状态转移
            int k=t.find('x');   //先找到x的位置   返回x的下标 
            int x=k/3,y=k%3;    // 把一维数组下标转换为二维数组下标    3x3矩阵 
            for(int i=0;i<4;i++)
            {
                int a=x+dx[i],b=y+dy[i]; //变化之后的坐标 
                if(a>=0&&a<3&&b>=0&&b<3)   //如果没有出界 
                {
                    swap(t[k],t[a*3+b]);  //交换    状态更新  更新完之后 一定要恢复状态 
                    if(!d.count(t))   //如果当前更新完之后的t没有被搜到过   那就找到了一个新的状态 
                    {
                        d[t]=distance +1;     //距离加1 
                        q.push(t);  //压入队列 
                    }
                    swap(t[k],t[a*3+b]);  //恢复状态 
                }
        
                
             } 
        }
        return -1;
    }
    int main(){
        string start;  //初始给定的字符串 
        for(int i=0;i<9;i++){
            char c;
            cin>>c;
            start+=c;
        }
        cout<<bfs(start)<<endl;
    } 
  • 相关阅读:
    8_python连接数据库
    7_数据类型
    Memcached delete 命令
    Memcached gets 命令
    Memcached get 命令
    Memcached CAS 命令
    Memcached prepend 命令
    Memcached append 命令
    Memcached replace 命令
    Memcached add 命令
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11746291.html
Copyright © 2011-2022 走看看