我正在尝试解决停止邮递员问题,但我找不到任何算法来解决它。问题是:
有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名。
我应该使用什么算法来解决这个问题?
答案 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)
即使我不知道这个问题的答案,但我有一个矛盾的测试用例,我无法对你的留言发表评论,因为它被标记为正确答案