《字串变化》广搜

这一题是广搜不难写,难的就是继续找下去。
所以这里参考了dalao的思路,枚举要变得字符串的每一位,并且继续枚举每一位的每一种变换方法…然后就是看细节了(蒟蒻的细节太弱了…)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> pii;
const int N = 2*1e5+5;
const int M = 998244353;
#define INF INT_MAX
#define INM INT_MIN
#define sd(a) scanf("%d",&a)
#define sld(a) scanf("%lld",&a)
#define sdd(a,b) scanf("%d %d",&a,&b)
#define pr(a) printf("%d\n",a)
#define plr(a) printf("%lld\n",a)
#define pr_(a) printf("%d ",a)
#define _pr(a) printf(" %d",a)
map<string,int> mp;
string s1,s2,rule[10],change[10];//rule和change存转换规则
int num = 0,ans;
string check(string s,int i,int j)
{
    int flag = 1,k;
    string sti = "";
   // cout << s << "的第" << i << "位的第" << j <<endl;
    if(s.size()-i < rule[j].size()) return "";//后面剩下的单词长度都不够,肯定不行
    for(k=0;k<rule[j].size();++k)
    {
        if(s[i+k] != rule[j][k])
        {
            flag = 0;
            break;
        }
    }
    if(!flag) return "";
    sti += s.substr(0,i);
    sti += change[j];
    sti += s.substr(i+k);
    return sti;
}
struct Node
{
    string str;
    int step;
};
int bfs(string x)
{
    Node p,q;
    queue<Node> Q;
    p.str = x;
    p.step = 0;
    mp[p.str]++;
    Q.push(p);
    while(!Q.empty())
    {
        q = Q.front();
        Q.pop();
        if(q.str == s2)
        {
            ans = q.step;
            if(ans <= 10) return 1;
            else return 0;
        }
        for(int i=0;i<q.str.size();++i)
        {
            for(int j=0;j<num;++j)//对于每个位置枚举所有可能的转换情况
            {
                string sss = check(q.str,i,j);
                if(sss != "" && mp[sss] == 0)//可以转换并且没出现过
                {
                    mp[sss]++;
                    p.str = sss;p.step = q.step+1;
                    Q.push(p);
                }
            }
        }
    }
    return 0;
}
int main()
{
    cin >> s1 >> s2;
    while(cin >> rule[num] >> change[num]) num++;
    if(bfs(s1) == 1) pr(ans);
    else printf("NO ANSWER!\n");
}
标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值