tw无人机路线规划代码

很多私信都问过这个问题 今天清理idea里的代码
分享一下 然后清理了
问题描述:
一个字符型二维矩阵中,每个格子都代表一个地理位置信息,需要设计一个无人机的飞行路线,拍下地图全景,每次可以拍上下左右中五个位置的照片。
主要思路:
1 螺旋飞行+3格定时拍照,每三个格子拍照一次,可以保证拍下全图。足够大的情况下,拍照次数约为全图1/3
2 隔行跳跃飞行,可以保证拍下全图。足够大的情况下,飞行距离约为全图1/3
代码很简单,思路也很简单,这一面一般不会挂人,最后挂在了非技术上也是挺离谱

import java.util.Scanner;

public class Plane {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int row = input.nextInt();
        int col = input.nextInt();
        // 创建地图
        int[][] map = createMap(row, col);
        // 螺旋飞行
        //new SolutionOne().spiralTravel(map, 0, map[0].length - 1, 0, map.length - 1);
        // 跳跃飞行
        new SolutionTwo().skipTravel(map, 0, map[0].length - 1, 1, map.length - 1);
        // 打印结果
        printMap(map);
    }

    private static int[][] createMap(int row, int col) {
        return new int[row][col];
    }

    private static void printMap(int[][] map) {
        for (int[] info : map) {
            for (int val : info) {
                System.out.print(val + " ");
            }
            System.out.println();
        }
    }
}

public class SolutionOne {

    public void spiralTravel(int[][] map, int left, int right, int up, int down) {
        int count = 0;
        while (true) {
            // 左到右
            for (int col = left; col <= right; col++) {
                takePhoto(map, up, col, count++);
            }
            if (++up > down) break;
            // 上到下
            for (int row = up; row <= down; row++) {
                takePhoto(map, row, right, count++);
            }
            if (--right < left) break;
            // 右到左
            for (int col = right; col >= left; col--) {
                takePhoto(map, down, col, count++);
            }
            if (--down < up) break;
            // 下到上
            for (int row = down; row >= up; row--) {
                takePhoto(map, row, left, count++);
            }
            if (++left > right) break;
        }
    }

    private void takePhoto(int[][] map, int row, int col, int count) {
        if (count % 3 == 0) {
            map[row][col] = 1;
        }
    }
}
public class SolutionTwo {

    public void skipTravel(int[][] map, int left, int right, int up, int down) {
        boolean leftToRight = true;
        while (true) {
            if (leftToRight) {
                moveL2R(map, left, right, up);
                leftToRight = false;
            } else {
                moveR2L(map, left, right, up);
                leftToRight = true;
            }
            // 边界判断
            if (up + 1 == down) {
                break;
            }
            // 跳跃条件
            if (up + 3 < down) {
                up = leftToRight ? skip(map, up, left, 3) : skip(map, up, right, 3);
            } else if (up + 3 == down) {
                up = leftToRight ? skip(map, up, left, 2) : skip(map, up, right, 2);
            } else {
                up = leftToRight ? skip(map, up, left, 1) : skip(map, up, right, 1);
            }
        }
    }

    private int skip(int[][] map, int up, int direction, int count) {
        for (int i = 0; i < count; i++) {
            map[up++][direction] = 1;
        }
        return up;
    }


    private void moveL2R(int[][] map, int left, int right, int up) {
        for (int col = left; col <= right; col++) {
            map[up][col] = 1;
        }
    }

    private void moveR2L(int[][] map, int left, int right, int up) {
        for (int col = right; col >= left; col--) {
            map[up][col] = 1;
        }
    }
}
#Thoughtworks#
全部评论
大佬牛逼 顺便贴个当时写的博客,xdm参考下,献丑啦 https://shitsurei.online/droneCrossPhotograph.html
15 回复 分享
发布于 2020-10-22 15:09
话说方案陈述阶段会要求英文陈述吗
1 回复 分享
发布于 2020-10-23 19:47
考了好几年了 不知道明年会不会继续
1 回复 分享
发布于 2020-10-21 09:11
边界判断和条件判断哪里看不懂,能解释下吗,拜托了
点赞 回复 分享
发布于 2021-10-15 17:05
补录给我发的文件是购物车程序,估计要换题了😂
点赞 回复 分享
发布于 2021-01-15 10:32
楼主什么岗位啊
点赞 回复 分享
发布于 2020-11-26 13:54
** 我当时写了个BFS。。。。原来是模拟么
点赞 回复 分享
发布于 2020-11-23 17:22
感谢分享😘
点赞 回复 分享
发布于 2020-11-19 15:29
请问楼主,无人机笔试及面试、群面、笔试之后,还有几个面啊?焦急😫
点赞 回复 分享
发布于 2020-10-29 15:52
后面群面也离谱,不知道公司想要什么样的人😂
点赞 回复 分享
发布于 2020-10-24 12:48
求问楼主方案陈述的时候要讲代码吗
点赞 回复 分享
发布于 2020-10-24 12:29
牛。不过刚考完才看到有点惨
点赞 回复 分享
发布于 2020-10-23 19:47
我实习投递做这个,正式投递还是这个。。。
点赞 回复 分享
发布于 2020-10-22 19:22
想问下,c++技术栈的面试这个公司是不是凉了
点赞 回复 分享
发布于 2020-10-22 11:00
老无人机了 印象里都考三年了吧?
点赞 回复 分享
发布于 2020-10-21 20:29
今年tw都没了么···我感觉我测评做的挺好的,也没收到要做题的消息
点赞 回复 分享
发布于 2020-10-21 20:28
 tw好像一直是这个题
点赞 回复 分享
发布于 2020-10-21 14:58

相关推荐

01-09 00:38
门头沟学院 Java
一面:&nbsp;1.&nbsp;RabbitMQ怎么保证消息的可靠性?&nbsp;生产者这方面的这个回调是指什么回调?2.&nbsp;synchronized&nbsp;的这个锁的加锁的方式?&nbsp;&nbsp;锁住的范围有什么不同3.&nbsp;synchornized加锁的过程?4.&nbsp;锁升级流程?5.&nbsp;synchronize&nbsp;是一个公平锁吗?6.&nbsp;CAS会存在什么问题?怎么解决7.&nbsp;介绍JVM常见的垃圾回收算法8.&nbsp;CMS&nbsp;和&nbsp;G1&nbsp;回收器的区别是啥9.&nbsp;CMS&nbsp;浮动垃圾问题?10.&nbsp;G1&nbsp;是怎么做STW&nbsp;时间预测的?11.&nbsp;MVCC&nbsp;是怎么实现可重复读的?12.&nbsp;介绍MySQL&nbsp;里的&nbsp;binlog,&nbsp;redolog,&nbsp;undolog13.&nbsp;这个&nbsp;redo&nbsp;log&nbsp;和&nbsp;redo&nbsp;log&nbsp;在这个发生这个&nbsp;crash&nbsp;的时候,他们俩是怎么配合去恢复保证这个数据的一致性的?14.&nbsp;平常用&nbsp;Redis&nbsp;的话主要是用在什么场景?用了缓存的话也没有遇到一些什么问题。15.&nbsp;如何解决缓存DB一致性问题?&nbsp;缓存删除失败了怎么办?16.&nbsp;分布式事务常用的有哪些方法?手撕:二叉树的最小深度二面:1.&nbsp;异步或者并发编程里面通常会出现这种可见性问题是什么原因导致的?&nbsp;应该怎么解决?&nbsp;&nbsp;除了volatile,还有什么其他方法解决可见性?(从Java内存模型角度回答&nbsp;&nbsp;&nbsp;解决方法:volatile,&nbsp;锁,原子类)2.&nbsp;线程池它底层是如何去运行的?3.&nbsp;线程池里的线程它把任务执行完之后,它接着干嘛?4.&nbsp;场景题1:有一个银行转账,比方说a、b、&nbsp;c&nbsp;三个账户,每个账户都有&nbsp;200&nbsp;块钱,我&nbsp;a&nbsp;账户去给&nbsp;b&nbsp;账户转&nbsp;100&nbsp;块钱,&nbsp;b&nbsp;账户给&nbsp;c&nbsp;账户转&nbsp;100&nbsp;块钱,然后他们同时去转账,我如何去保证他的账户数据安全或者正确?(事务&nbsp;+&nbsp;行锁写锁(select&nbsp;*&nbsp;from&nbsp;xx&nbsp;for&nbsp;update)&nbsp;&nbsp;)5.&nbsp;mysql什么样的数据结构能够作为索引的存储结构?6.&nbsp;什么场景我应该用&nbsp;b+树?什么场景我应该&nbsp;b&nbsp;树?什么场景我应该用哈希。7.&nbsp;Mysql&nbsp;的索引,它在什么场景下它会失效?8.&nbsp;假如说我要把一个树状结构存储到&nbsp;Mysql&nbsp;数据库中,怎么去存呢?9.&nbsp;假如说我有&nbsp;1,&nbsp;000&nbsp;万个学生,对吧?嗯,学生有学号、姓名、年龄,我按年龄上加了一个二级索引,我再按年龄从小到大去排序,我要查询到第&nbsp;900&nbsp;万个学生怎么去查?10.&nbsp;HTTP状态码代表的含义11.&nbsp;Redis&nbsp;的话怎么是去保证数据的可靠性的?RDB&nbsp;的过程中它会阻塞主线程吗?12.&nbsp;Redis&nbsp;持久化中,异步过程如果有新的数据写入,它是怎么处理的?13.&nbsp;了解哪些限流算法吗?14.&nbsp;实现一个限流工具要怎么去做?手撕:&nbsp;三数之和
发面经攒人品
点赞 评论 收藏
分享
评论
20
228
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务