我应该使用什么算法来解决停止邮差的问题?

时间:2012-08-08 20:05:07

标签: algorithm

我正在尝试解决停止邮递员问题,但我找不到任何算法来解决它。问题是:

  

有n个房屋编号为1到n,n个邮递员,每个房屋都有n个   在每个房子里张贴的信件。邮政局长决定了一项计划   这样每个邮递员在不同的地方访问每个房子一次   时间,即任何时候任何一所房子里最多只有一名邮递员。   由于没有其他邮递员,邮政局长希望没有邮政局长   在向n个房屋发送帖子期间会见任何其他人。所以他想要一个   邮递员在特定的房子后停止发帖。那就是Postmaster   想要找到一个序列停止,以便第i个邮递员   一旦他访问那所房子,就在停止[i] -th 之后停止发布。如   他想确保每个房子里最多有一个岗位   必须选择序列停止,以便邮递员A访问房屋   H在时间T,他停止在房子后发布,然后没有其他   邮递员访问房子H后时间T.帮助postmaster找到这样的   序列停止

输入如下:

首先 n (1≤ n ≤100),表示邮递员和房屋的数量。然后是 n 行,每行包含 n 正整数。 第i 行中的第j 整数表示第i 邮递员将访问第j <的时间/ strong> house。

实施例: n = 3

序列是:

  

1 2 3

     

4 5 6

     

7 8 9

输出的停止数组应为:

3 2 1,即第1位邮递员停在第3宫,第2宫第2名,第1名第3名。

我应该使用什么算法来解决这个问题?

2 个答案:

答案 0 :(得分:0)

更新,我的答案错了。

新解决方案: 在每一步中找到每一行的最小数字,然后取最大值,这将是第i个邮递员的停止。在下一步的每一步都不再考虑邮差了

对于您提供的样本:

1 2 3 
4 5 6 
7 8 9

第1步我们发现1 4 7,最大值为7因此第3邮差停在第1宫(停止[3] = 1) 之后我们不考虑第1列和第3行 第二步我们找到2和5,最大值是5所以 - 停止[2] = 2; 第3步停止[1] = 3;

那么,为什么这是真的,如果我们在某个步骤中选择了正确的数字,我们知道对于同一列中的任何数字,它要么小于我们的数字(这意味着它不会导致以后的问题),要么更大我们的号码,但该行的号码小于稍后选择的号码,以便不会使用我们列中较大的号码

以示例@Wayne Rooney提供

1 4 2
8 6 9
5 7 3

第1步找到1,6,3,选择6 第2步找到1,3选择3 第3步1 回答:1,2,3

答案 1 :(得分:0)

@Herokiller您的算法不正确。 以:例如:

1 4 2

8 6 9

5 7 3

您的输出将是:

Step1:取元组(8,7,3)min为7然后取(8,9)所以min为8,最后(2) 所以输出是3,1,2

但回答是1 2 3,即(1,6,3)

即使我不知道这个问题的答案,但我有一个矛盾的测试用例,我无法对你的留言发表评论,因为它被标记为正确答案