lanqiao OJ 261 九宫重排

简介: lanqiao OJ 261 九宫重排

1.九宫重排 - 蓝桥云课 (lanqiao.cn)

这个题跟前的那个华容道的题差不多,我们需要用map记录string有没有走过,然后用bfs遍历,

把三排的图利用  /  和  %  变成一行的字符,当找到刚开始要的找的目标字符串的时候就返回他的map值

#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<map>
 
using namespace std ;
int d[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
queue<string> q ;//bfs
string a ,b;//初始字符串,目标字符串
map<string,int> mp ;//用mp记录距离,已经变换过的次数
 
int bfs(){
    while(!q.empty()){
        string now = q.front() ;
        q.pop() ;
        if(now == b) return mp[now] ;//找到目标字符串就返回
        int cnt1 = now.find('.') ;//找到‘.’在字符串的位置
        int x = cnt1 / 3 , y = cnt1 % 3 ;
        for(int i = 0 ; i < 4 ; i ++){
            int tx = x + d[i][0] , ty = y + d[i][1]  ;       
            if(tx<0||tx>=3||ty<0||ty>=3) continue ;
            int cnt2 = tx * 3 + ty ;  
            string ts = now ;
            ts[cnt1] = now[cnt2] ;
            ts[cnt2] = '.' ;
 
            if(mp[ts]) continue ;//如果这个字符串已经被遍历过就继续循环
 
            q.push(ts) ;
            mp[ts] = mp[now] + 1 ;//mp值加一
        }
    }
}
 
int main(){
    cin >> a >> b ;
    q.push(a) ;
    
    mp[a] = 0 ;//当初始状态的时候不用变换为0
    cout << bfs() << endl ;
    return 0 ;
}
相关文章
|
12月前
|
机器学习/深度学习 算法
代码随想录Day25 回溯算法 LeetCode T51 N皇后问题
代码随想录Day25 回溯算法 LeetCode T51 N皇后问题
56 1
|
机器学习/深度学习
【Leetcode】面试题 08.05. 递归乘法、HJ55 挑7
目录 面试题 08.05. 递归乘法 HJ55 挑7
55 0
|
12月前
|
测试技术
代码随想录Day24 LeetCode T491 递增子序列 LeetCode T46 全排列 LrrtCode T47 全排列II
代码随想录Day24 LeetCode T491 递增子序列 LeetCode T46 全排列 LrrtCode T47 全排列II
35 1
lanqiao OJ 649 算式900
lanqiao OJ 649 算式900
lanqiao OJ 229 迷宫与陷阱
lanqiao OJ 229 迷宫与陷阱
|
5月前
|
容器
代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I
代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I
58 0
|
11月前
|
算法
代码随想录算法训练营第十一天 | LeetCode 20. 有效的括号、LeetCode 1047. 删除字符串中的所有相邻重复项、LeetCode 150. 逆波兰表达式求值
代码随想录算法训练营第十一天 | LeetCode 20. 有效的括号、LeetCode 1047. 删除字符串中的所有相邻重复项、LeetCode 150. 逆波兰表达式求值
57 0
|
11月前
|
算法
代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II
代码随想录算法训练营第二十八天 | LeetCode 491. 递增子序列、46. 全排列、47. 全排列 II
56 0
|
C++
Leetcode 每日一题 1911. 最大子序列交替和 c++
Leetcode 每日一题 1911. 最大子序列交替和 c++
77 0
|
算法
经典算法题---链表奇偶重排(好题)&&双指针系列
经典算法题---链表奇偶重排(好题)&&双指针系列
104 0
经典算法题---链表奇偶重排(好题)&&双指针系列