以下原答案有误。评论区提到了 SJT算法(Steinhaus–Johnson–Trotter algorithm),可以直接搜索这个算法。大致就是说,将以下原答案中方法调换步骤,原来是 1 每换一次位置,将 2 到 n+1 进行一次 n 的情形的操作,现在是每进行一次 2 到 n+1 的操作,就将 1 通过换位从头到尾遍历一次。
假设 n 成立,考虑 n+1 的情况
将图分为 n+1 个两两不交的子图 G1, G2, … , Gn,分别为 1 在排列中位置为 1, 2, … , n+1,每一个子图都是 n 的情况,故有一个回路,接下来只要接起来即可。那很显然,任取 Gi 中一点 g,它通过交换在 i 这个位置的 1 到 i+1 位置,就可以得到 G(i+1) 中一点,故我们可以把这些回路连接起来得到一个大回路。