摘要: 题意:1~n的一个排列,两两互换,每个位置每天只能做一次交换,问最多几天能交换成1~n,并且输出交换步骤。解法:把该置换中所有的循环节找出,各循环节之间的交换是并行的,两两不相关,每天只需在循环节内部交换。 若循环节长度为1,则无需交换,若循环节长度为2,则只需交换一次,若循环长度>2,则只需要交换2次。 置换方法:每个循环节中的第一个和最后一个交换,第二个和倒数第二个交换... 至于为什么只需两次,可以在纸上模拟一下置换过程,按上述置换方法一次交换后,一个循环节变成了(n-1)/2个长度为2的循环节,可以一次并行交换。代码如下:/**************************** 阅读全文
posted @ 2013-07-24 14:39 Chierush 阅读(534) 评论(0) 推荐(0) 编辑