2016年腾讯实习后台开发工程师面试题-- N个骑士,聚会问题

昨天刚面了腾讯实习,被一道题给问懵逼了,网上也搜不到答案,回来找一个大牛师兄询问了一下,师兄给了一种思路,就把师兄的思路给大家记录一下,为下面的面试做准备。

这道题是一道主观题,不要求写代码,应该是主要考察面试者的思路。

问题:

在8X8的棋盘上分布着n个骑士,他们想约在某一个格中聚会。骑士(骑士初始位置已定)可以像国际象棋中的马(走日字)那样移动一次,可以从中间像8个方向移动(当然不能走出棋盘),请计算n个骑士的最早聚会地点。要求尽早聚会,且n个人走的总步数最少,先到聚会地点的骑士可以不再移动等待其他的骑士。

师兄分析:

首先要基于一个假设,就是骑士能够到达棋盘的每一个点。(验证这个假设的思路也很简单,就是考虑中国象棋里面的马,也是走日字的,就经验来说,马应该可以到达棋盘的任何位置,所以8*8的棋盘的骑士走日字应该也能到达棋盘的任何位置。)

确定了骑士可以到达棋盘的任何一个位置后,我们先分析一个骑士的问题,可以对一个初始位置已定的骑士计算到达棋盘上每个位置的距离(具体计算方法网上应该有参考的,就是骑士周游棋盘问题),对于棋盘上的每个点,都有一个到达距离值。

对于n个骑士,就计算N个骑士到达棋盘每个点的值。计算的结果应该是一个N*64的数组。

找到N*64个位置数组后,再对64个位置上距离比较,找到64个位置上的最大值。

再对64个位置上的最大值进行排序,找到64个位置上最大值的最小值,那个点就应该n个骑士最早的聚会地点。

最后,真是感叹师兄厉害啊,逻辑分析能力超强,我反正是无法再那么短的时间想出这个解决方案,哎,下面继续苦逼准备找工作吧,好好学习,天天向上。


    原文作者:骑士周游问题
    原文地址: https://blog.csdn.net/u014463416/article/details/51160138
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞