小编Sta*_*cky的帖子

矩阵中最短距离之间的最大值

我试图解决以下问题,但无法开发算法或方法.我已经研究了几个小时,并试图将问题映射到"最短路径"图形/矩阵问题或动态编程问题,但是它没有成功.

我相信stackoverflow是发布此而不是cs.stackexchange.com的正确网站.在downvoting之前,请发表评论并告诉我,如果不是这样,我将删除该问题或将其移至另一个网站:)

给定宽度为w的网格,h为高度.网格的每个单元代表一个潜在的建筑物,我们将在该网格中添加"n"个建筑物.目标是使所有地段中最远的地方尽可能接近建筑物.给定输入n(即要放置在该批次中的建筑物数量),确定建筑物放置以最小化距离建筑物最远的空地段的距离.运动受限于水平和垂直,即不需要对角线运动.

例如,w=4, h=4 and n=3.最佳网格布置可将任何批次设置在建筑物的两个单位距离内.这个案子的答案是2.

"0"表示最佳建筑物放置,并且在这种情况下,每个单元到最近建筑物的所有最短距离的最大值是"2".

1 0 1 2
2 1 2 1
1 0 1 0
2 1 2 1
Run Code Online (Sandbox Code Playgroud)

以上代表一种最佳解决方案,可以更像上述旋转的阵列作为示例.以上是最佳解决方案,因为在3个建筑物(n = 3)中,一个建筑物放置在索引(0,1)处,第二个建筑物放置在(2,1)处,第三个建筑物放置在(2,3)处.每次水平和/或垂直移动时,周围的水平和垂直距离显示为1和2,加1.请再次注意,不允许对角线移动:

1 ? 0 ? 1 ? 2
    ?
2 ? 1 ? 2 ? 1
    ?       ?
1 ? 0 ? 1 ? 0
    ?       ?
2 ? 1 ? 2 ? 1
Run Code Online (Sandbox Code Playgroud)

其他例子:

例1)

w=3, h=3, n=2
Run Code Online (Sandbox Code Playgroud)

必须最佳地放置两个建筑物(零).这种情况的最佳方案之一是:

01
11
10

0 ? 1
?
1   1
    ?  
1 ? …
Run Code Online (Sandbox Code Playgroud)

algorithm graph matrix dynamic-programming shortest-path

8
推荐指数
1
解决办法
4938
查看次数

迭代函数可以调用自身吗?

在观看下面的 MIT 6.001 课程视频时,教师在 28:00 将此算法标记为迭代。但是,在 30.27,他说这个算法和实际的“递归”算法都是递归的。该函数使用基本情况调用自身,那么这个迭代如何?

https://www.youtube.com/watch?v=dlbMuv-jix8&list=PLE18841CABEA24090&index=2

private int iterativeSum(int x, int y)
{
    System.out.println("x "+x+" y "+y);
    if(x == 0)
    {
        return y;
    }
    return iterativeSum(--x, ++y);
}
Run Code Online (Sandbox Code Playgroud)

java iteration recursion scheme sicp

2
推荐指数
1
解决办法
423
查看次数