割草机

题目描述

有一块n*m的地,每块地要么长满杂草(用' W'表示),要么是空地(用' G'表示),现在有一个人站在(1,1),面向(1,m),他可以按如下两种方式移动: 

1、向面朝的方向移动一格,耗费1单位时间

2、向下移动一格,并反转面朝的方向(右变左,左变右),耗费1单位时间

现在他想知道清除所有的杂草最少需要多少单位时间(清除完杂草之后不用返回(1,1))

输入描述:

第一行n,m
接下来n行每行一个字符串表示矩阵。
n,m<=150

输出描述:

一行一个整数表示答案。
示例1

输入

4 5
GWGGW
GGWGG
GWGGG
WGGGG

输出

11
示例2

输入

3 3
GWW
WWW
WWG

输出

7

解题思路:


1.从左上角第一个格子开始走,如果本行有杂草地那么最短路线中必须先将本行走完

2.然后当转到奇数行时,该从右向左查找杂草地,然后偶数行时从左向右

3.找到杂草地后,计算从上一个杂草地到这个杂草地走了多远并且加到总步数中



示例代码:


#include "stdlib.h"
#include "stdio.h"
#include "math.h"
int main(){
    int row,col;
    scanf("%d %d",&row,&col);
    char arrayMap[150][150];
    for(int i=0;i<row;i++){
        scanf("%s",arrayMap[i]);
    }
    
    //进行查找
    int judge[150];//用于记录每行是否存在杂草
    int number=0;//记录步数
    int preRow=1,preCol=1;//记录上一个杂草的位置 行和列
    for(int i=0;i<row;i++){
        if(i%2!=0){//奇数行
            for(int j=col-1;j>=0;j--){
                if(arrayMap[i][j]=='W'){
                    judge[i] = 1;
                    number = number+abs(j+1-preCol); //找到杂草位置 加上所走的步数
                    preCol = j+1;                    //记录当前杂草位置的列
                    preRow = i+1;
                    //printf("%d %d\n",i,number);
                }
            }
        }
        else{//偶数行
            for(int j=0;j<col;j++){
                if(arrayMap[i][j]=='W'){
                    judge[i] = 1;
                    number = number+abs(j+1-preCol); //找到杂草位置 加上所走的步数
                    preCol = j+1;                    //记录当前杂草位置的列
                    preRow = i+1;
                    //printf("%d %d\n",i,number);
                }
            }

        }
        if(i!=(row-1))
           number++;//向下走一格 步数加一
    }
    for(int i=row-1;i>=0;i--){
        if (judge[i]==1)
        {
            break;
        }
        else{
            if(number>0)
                number--;
            else
                number=0;

        }
            
    }
    printf("%d\n",number);
    return 0;
}



转载于:https://www.cnblogs.com/chxuan/p/8232090.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: BLDC割草机代码是指用于控制无刷直流电机的程序。无刷直流电机采用电子换相技术,与传统的有刷直流电机相比具有更好的效率和耐久性。 首先,代码需要读取割草机传感器的数据,如割草机的位置、速度和草坪的尺寸等。这些数据是割草机控制的基础。 其次,代码需要实现一个闭环控制算法,用于根据传感器数据调整电机的转速和方向。闭环控制算法可以根据草坪的尺寸和形状,制定割草路径并保持一定的割草速度。此外,通过监测电机的电流和温度,还可以实现过载保护和故障检测。 另外,代码需要包含用于与用户交互的界面。用户可以通过编程或按键输入控制割草机的运行模式、速度和割草方向等参数。代码还可以通过LCD显示屏或蜂鸣器等输出设备,向用户提供运行状态和故障提示。 最后,代码还可以加入一些附加功能,如自动充电功能、防碰撞功能和避免在下雨天割草的功能等。这些功能需要通过额外的硬件设备和算法来实现,并与基本的割草机控制代码进行集成。 综上所述,BLDC割草机代码主要实现了读取传感器数据、闭环控制算法、用户界面和一些附加功能。在实际使用中,根据具体需要和硬件条件,可以对代码进行定制和优化。 ### 回答2: BLDC割草机代码是控制无刷直流电机(BLDC)以实现割草机器的运转的一系列程序指令。BLDC割草机代码通常由硬件和软件两个方面组成。 在硬件方面,BLDC割草机代码需要依赖一些传感器和控制器组件。常见的传感器包括电机速度传感器、角度传感器和电流传感器,用于检测电机的旋转速度、位置和电流等信息。控制器则用来接收传感器的反馈信息,并实时调整电机的转速和控制方式。 在软件方面,BLDC割草机代码涉及到电机的开关控制和速度调节等关键操作。首先,代码会根据传感器的反馈信息,判断电机当前的状态和运行情况。然后,根据需要,代码会控制电机的开关,即使电机开始转动或停止。同时,代码还会根据用户的设置,调整电机的转速,以适应不同的割草需求。 另外,BLDC割草机代码还需要考虑一些保护措施,如过流保护和过热保护等。当电机运行时,如果电流异常或温度过高,代码会立即采取措施,如降低电机转速或中断电机运行,以防止电机损坏或发生危险。 总的来说,BLDC割草机代码是一套复杂的程序指令,能够有效控制无刷直流电机以实现割草机的正常运转和保护。通过代码的编写和优化,割草机能够实现高效割草,提高工作效率,并保障用户的安全。 ### 回答3: BLDC割草机代码是用于控制无刷直流电机(BLDC)的程序。无刷直流电机是割草机推动剃刀转动的关键部件。以下是一个简单的BLDC割草机代码示例: ```c #include <Arduino.h> // 定义引脚 #define IN1_PIN 2 #define IN2_PIN 3 #define IN3_PIN 4 #define IN4_PIN 5 // 定义速度控制参数 #define SPEED_PIN A0 #define MAX_SPEED 255 void setup() { // 设置引脚模式 pinMode(IN1_PIN, OUTPUT); pinMode(IN2_PIN, OUTPUT); pinMode(IN3_PIN, OUTPUT); pinMode(IN4_PIN, OUTPUT); pinMode(SPEED_PIN, INPUT); // 初始化串口通信 Serial.begin(9600); } void loop() { // 读取速度控制输入 int speed = analogRead(SPEED_PIN); speed = map(speed, 0, 1023, 0, MAX_SPEED); // 控制BLDC电机 digitalWrite(IN1_PIN, HIGH); digitalWrite(IN2_PIN, LOW); digitalWrite(IN3_PIN, HIGH); digitalWrite(IN4_PIN, LOW); analogWrite(SPEED_PIN, speed); // 打印当前速度 Serial.print("当前速度:"); Serial.println(speed); delay(100); } ``` 这段代码使用Arduino开发板来控制BLDC割草机。首先,需要定义BLDC电机的引脚,即IN1_PIN、IN2_PIN、IN3_PIN和IN4_PIN。然后,通过读取速度控制输入来设置电机的转速。最后,通过设置引脚电平和使用analogWrite函数来控制电机的转向和速度。程序还通过串口通信输出当前速度。延迟100毫秒后,循环再次执行。 这只是一个简化的代码示例,实际的BLDC割草机代码可能还包括其他功能,如电机起动和停止控制、安全保护等。简单的BLDC割草机代码可以根据具体需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值