fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Permutations
  8. {
  9. /// <summary>
  10. /// リストの拡張メソッド
  11. /// </summary>
  12. public static class MyListExtensions
  13. {
  14. /// <summary>
  15. /// 人間が読みやすいように表示
  16. /// </summary>
  17. /// <typeparam name="T"></typeparam>
  18. /// <param name="list"></param>
  19. /// <returns></returns>
  20. public static string ToPrettyString<T>(this List<T> list)
  21. {
  22. var str = new StringBuilder();
  23. str.Append(string.Format("[ n = {0}", list.Count));
  24. if (list.Count > 0)
  25. {
  26. str.Append(" : ");
  27. for (var i = 0; i < list.Count; ++i)
  28. {
  29. var e = list[i];
  30. str.Append(e.ToString());
  31. if (i < list.Count - 1)
  32. str.Append(", ");
  33. }
  34. }
  35. str.Append(" ]");
  36. return str.ToString();
  37. }
  38. }
  39.  
  40. class Program
  41. {
  42. static void Main(string[] args)
  43. {
  44. var list = new List<int>(Enumerable.Range(1, Convert.ToInt32(Console.ReadLine())));
  45. var results = Permutations(list);
  46. Console.WriteLine("length = {0}", results.Count);
  47. foreach (var r in results)
  48. Console.WriteLine(r.ToPrettyString());
  49. Console.ReadKey();
  50. }
  51.  
  52. static List<List<T>> _Permutations<T>(List<T> list, List<T> result)
  53. {
  54. if (list.Count <= 0)
  55. return new List<List<T>>() { result };
  56.  
  57. var result1 = new List<List<T>>();
  58. for (var i = 0; i < list.Count; ++i)
  59. {
  60. var n = list[i];
  61. var result2 = new List<T>(result);
  62. result2.Add(n);
  63. var list2 = list.Take(i).Concat(list.Skip(i + 1)).ToList();
  64. result1.AddRange(_Permutations(list2, result2));
  65. }
  66. return result1;
  67. }
  68.  
  69. /*
  70.   [1, 2, 3]の順列を列挙する
  71.   最初の要素を取って、残りの要素たちを再起でつなげる
  72.   */
  73. static List<List<T>> Permutations<T>(List<T> list)
  74. {
  75. return new List<List<T>>(_Permutations(list, new List<T>()));
  76. }
  77. }
  78. }
  79.  
Success #stdin #stdout 0.06s 24176KB
stdin
5
stdout
length = 120
[ n = 5 : 1, 2, 3, 4, 5 ]
[ n = 5 : 1, 2, 3, 5, 4 ]
[ n = 5 : 1, 2, 4, 3, 5 ]
[ n = 5 : 1, 2, 4, 5, 3 ]
[ n = 5 : 1, 2, 5, 3, 4 ]
[ n = 5 : 1, 2, 5, 4, 3 ]
[ n = 5 : 1, 3, 2, 4, 5 ]
[ n = 5 : 1, 3, 2, 5, 4 ]
[ n = 5 : 1, 3, 4, 2, 5 ]
[ n = 5 : 1, 3, 4, 5, 2 ]
[ n = 5 : 1, 3, 5, 2, 4 ]
[ n = 5 : 1, 3, 5, 4, 2 ]
[ n = 5 : 1, 4, 2, 3, 5 ]
[ n = 5 : 1, 4, 2, 5, 3 ]
[ n = 5 : 1, 4, 3, 2, 5 ]
[ n = 5 : 1, 4, 3, 5, 2 ]
[ n = 5 : 1, 4, 5, 2, 3 ]
[ n = 5 : 1, 4, 5, 3, 2 ]
[ n = 5 : 1, 5, 2, 3, 4 ]
[ n = 5 : 1, 5, 2, 4, 3 ]
[ n = 5 : 1, 5, 3, 2, 4 ]
[ n = 5 : 1, 5, 3, 4, 2 ]
[ n = 5 : 1, 5, 4, 2, 3 ]
[ n = 5 : 1, 5, 4, 3, 2 ]
[ n = 5 : 2, 1, 3, 4, 5 ]
[ n = 5 : 2, 1, 3, 5, 4 ]
[ n = 5 : 2, 1, 4, 3, 5 ]
[ n = 5 : 2, 1, 4, 5, 3 ]
[ n = 5 : 2, 1, 5, 3, 4 ]
[ n = 5 : 2, 1, 5, 4, 3 ]
[ n = 5 : 2, 3, 1, 4, 5 ]
[ n = 5 : 2, 3, 1, 5, 4 ]
[ n = 5 : 2, 3, 4, 1, 5 ]
[ n = 5 : 2, 3, 4, 5, 1 ]
[ n = 5 : 2, 3, 5, 1, 4 ]
[ n = 5 : 2, 3, 5, 4, 1 ]
[ n = 5 : 2, 4, 1, 3, 5 ]
[ n = 5 : 2, 4, 1, 5, 3 ]
[ n = 5 : 2, 4, 3, 1, 5 ]
[ n = 5 : 2, 4, 3, 5, 1 ]
[ n = 5 : 2, 4, 5, 1, 3 ]
[ n = 5 : 2, 4, 5, 3, 1 ]
[ n = 5 : 2, 5, 1, 3, 4 ]
[ n = 5 : 2, 5, 1, 4, 3 ]
[ n = 5 : 2, 5, 3, 1, 4 ]
[ n = 5 : 2, 5, 3, 4, 1 ]
[ n = 5 : 2, 5, 4, 1, 3 ]
[ n = 5 : 2, 5, 4, 3, 1 ]
[ n = 5 : 3, 1, 2, 4, 5 ]
[ n = 5 : 3, 1, 2, 5, 4 ]
[ n = 5 : 3, 1, 4, 2, 5 ]
[ n = 5 : 3, 1, 4, 5, 2 ]
[ n = 5 : 3, 1, 5, 2, 4 ]
[ n = 5 : 3, 1, 5, 4, 2 ]
[ n = 5 : 3, 2, 1, 4, 5 ]
[ n = 5 : 3, 2, 1, 5, 4 ]
[ n = 5 : 3, 2, 4, 1, 5 ]
[ n = 5 : 3, 2, 4, 5, 1 ]
[ n = 5 : 3, 2, 5, 1, 4 ]
[ n = 5 : 3, 2, 5, 4, 1 ]
[ n = 5 : 3, 4, 1, 2, 5 ]
[ n = 5 : 3, 4, 1, 5, 2 ]
[ n = 5 : 3, 4, 2, 1, 5 ]
[ n = 5 : 3, 4, 2, 5, 1 ]
[ n = 5 : 3, 4, 5, 1, 2 ]
[ n = 5 : 3, 4, 5, 2, 1 ]
[ n = 5 : 3, 5, 1, 2, 4 ]
[ n = 5 : 3, 5, 1, 4, 2 ]
[ n = 5 : 3, 5, 2, 1, 4 ]
[ n = 5 : 3, 5, 2, 4, 1 ]
[ n = 5 : 3, 5, 4, 1, 2 ]
[ n = 5 : 3, 5, 4, 2, 1 ]
[ n = 5 : 4, 1, 2, 3, 5 ]
[ n = 5 : 4, 1, 2, 5, 3 ]
[ n = 5 : 4, 1, 3, 2, 5 ]
[ n = 5 : 4, 1, 3, 5, 2 ]
[ n = 5 : 4, 1, 5, 2, 3 ]
[ n = 5 : 4, 1, 5, 3, 2 ]
[ n = 5 : 4, 2, 1, 3, 5 ]
[ n = 5 : 4, 2, 1, 5, 3 ]
[ n = 5 : 4, 2, 3, 1, 5 ]
[ n = 5 : 4, 2, 3, 5, 1 ]
[ n = 5 : 4, 2, 5, 1, 3 ]
[ n = 5 : 4, 2, 5, 3, 1 ]
[ n = 5 : 4, 3, 1, 2, 5 ]
[ n = 5 : 4, 3, 1, 5, 2 ]
[ n = 5 : 4, 3, 2, 1, 5 ]
[ n = 5 : 4, 3, 2, 5, 1 ]
[ n = 5 : 4, 3, 5, 1, 2 ]
[ n = 5 : 4, 3, 5, 2, 1 ]
[ n = 5 : 4, 5, 1, 2, 3 ]
[ n = 5 : 4, 5, 1, 3, 2 ]
[ n = 5 : 4, 5, 2, 1, 3 ]
[ n = 5 : 4, 5, 2, 3, 1 ]
[ n = 5 : 4, 5, 3, 1, 2 ]
[ n = 5 : 4, 5, 3, 2, 1 ]
[ n = 5 : 5, 1, 2, 3, 4 ]
[ n = 5 : 5, 1, 2, 4, 3 ]
[ n = 5 : 5, 1, 3, 2, 4 ]
[ n = 5 : 5, 1, 3, 4, 2 ]
[ n = 5 : 5, 1, 4, 2, 3 ]
[ n = 5 : 5, 1, 4, 3, 2 ]
[ n = 5 : 5, 2, 1, 3, 4 ]
[ n = 5 : 5, 2, 1, 4, 3 ]
[ n = 5 : 5, 2, 3, 1, 4 ]
[ n = 5 : 5, 2, 3, 4, 1 ]
[ n = 5 : 5, 2, 4, 1, 3 ]
[ n = 5 : 5, 2, 4, 3, 1 ]
[ n = 5 : 5, 3, 1, 2, 4 ]
[ n = 5 : 5, 3, 1, 4, 2 ]
[ n = 5 : 5, 3, 2, 1, 4 ]
[ n = 5 : 5, 3, 2, 4, 1 ]
[ n = 5 : 5, 3, 4, 1, 2 ]
[ n = 5 : 5, 3, 4, 2, 1 ]
[ n = 5 : 5, 4, 1, 2, 3 ]
[ n = 5 : 5, 4, 1, 3, 2 ]
[ n = 5 : 5, 4, 2, 1, 3 ]
[ n = 5 : 5, 4, 2, 3, 1 ]
[ n = 5 : 5, 4, 3, 1, 2 ]
[ n = 5 : 5, 4, 3, 2, 1 ]