关闭

割草机

81人阅读 评论(0) 收藏 举报
分类:

题目描述

有一块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;
}



1
0
查看评论

Wannafly挑战赛4 C 割草机

题目链接:https://www.nowcoder.com/acm/contest/35/C 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 有一块n*m的...
  • qq_34287501
  • qq_34287501
  • 2017-11-25 10:22
  • 219

牛客网Wannafly挑战赛4(割草机)

点击打开链接 思路:不管怎么走,都必须从第一个有'W'的行走到最后一个有'W'的行,对于每一行,都必须处理完这行所有的'W',如果在奇数行,那就应该走到这行和下一行有W的最右边,再往下走,如果在偶数行,那就应该走到该行和下一行有W的最左端,然后往下走...
  • qq_34143240
  • qq_34143240
  • 2017-11-25 10:36
  • 150

wannafly挑战赛4 C-割草机 思维

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 有一块n*m的地,每块地要么长满杂草(用’W’表示),要么是空地(用’G’表示),现在有一个人站在(1,1),面向(1,m),他可以按如下...
  • qq_33859479
  • qq_33859479
  • 2017-11-25 10:26
  • 152

Wannafly挑战赛4,C题割草机,(模拟)

题意:给你一个n*m的图,W表示草,G表示空地。割草机在(1,1)位置面向(1,m),割草机可以向前走一步,也可以向下走一步(并且一定会向后转)只有这两种走为法,问割草机最少走几步。 思路:割草机必须走s型才能把有草的地方走遍,模拟这个过程,存一下每行的草的最大位置和最小位置。每次走的话要考虑下一层...
  • xiangAccepted
  • xiangAccepted
  • 2017-11-25 09:28
  • 152

Wannafly挑战赛4 C割草机 模拟

思路:由于水平方向只有两种走法,所以一定是从开始向右,然后向左,,向右。。。。。。所以奇数行向右,偶数行向左,注意一下上一行的最后位置就好。最后加上每次往下走的代价。#include <bits/stdc++.h> using namespace std; const int MAXN ...
  • fanhansheng
  • fanhansheng
  • 2017-11-27 21:01
  • 57

牛客网Wannafly挑战赛4 C.割草机(模拟)

题目描述 有一块n*m的地,每块地要么长满杂草(用’W’表示),要么是空地(用’G’表示),现在有一个人站在(1,1),面向(1,m),他可以按如下两种方式移动: 1、向面朝的方向移动一格,耗费1单位时间 2、向下移动一格,并反转面朝的方向(右变左,左变右),耗费1单位时间 ...
  • riba2534
  • riba2534
  • 2017-11-25 10:04
  • 207

newCoder Wannafly挑战赛4:C 割草机

题目链接:https://www.nowcoder.com/acm/contest/35/C 有一块n*m的地,每块地要么长满杂草(用'W'表示),要么是空地(用'G'表示), 现在有一个人站在(1,1),面向(1,m),他可以按如下两种方式移动: 1...
  • wyxeainn
  • wyxeainn
  • 2017-11-27 15:25
  • 147

wannafly挑战赛4C-水题&思维-割草机

https://www.nowcoder.com/acm/contest/35/C 这题也算水了,可我当时看开始过的人也不多,以为很难。。 自己吓自己。 还错了一个细节。。又tm是细节。 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...
  • qq_35781950
  • qq_35781950
  • 2017-11-26 21:18
  • 33

我的小飞机-割草机1号

2014年和好基友一起完成的小飞机一直雪藏在家里, 开了博客,拿出来晒一晒!纪念一下那段有趣的日子。勉励一下自己,说好的“割草机”二号迟迟没有动工!~~(>_<)~~ 先上萌图! 同学单反抓拍的,感觉拍的不错就要过来保存了。这张看着就开心!这是传说中烤四轴的画面,上位机实时监控飞行参...
  • zjutczj
  • zjutczj
  • 2016-07-11 17:37
  • 529

Wannafly 挑战赛 4 C 题 割草机 【模拟】

传送门 //题意: 题意就是开始位于(1,1)处, 面向右方, 然后每次 只能向面朝的方向移动, 每次向下移动面朝方向反向, 每次移动花费1时间, 问吧所有的草除掉, 最少要用多少时间. //思路: 很明显在奇数层只能往右走,偶数层只能往左走, 并且不能回头, 那么走的方式也只有一种, 由于只能...
  • Anxdada
  • Anxdada
  • 2017-11-25 10:53
  • 89
    个人资料
    • 访问:126523次
    • 积分:3214
    • 等级:
    • 排名:第12600名
    • 原创:187篇
    • 转载:4篇
    • 译文:9篇
    • 评论:33条
    RUNNING|~_~|My web
    微信公众号
    课程设计、视频资源、有料趣文
    Worldhello


    微信公众号:Worldhello
    期待您的关注!
    博客专栏
    最新评论