1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 巡回セールスマン問題メニュー(言語選択)
  4. 問題一覧 Clojure(Beta)編
  5. 順列全列挙 Clojure(Beta)編

巡回セールスマン問題メニューのサムネイル
順列全列挙 Clojure(Beta)編(paizaランク B 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

巡回セールスマン問題とは、都市の集合と各都市間の距離が与えられ、全都市をちょうど1回ずつ訪れたのち出発した都市に戻ってくるような経路 (巡回路) のうち最も短いものを求める問題です。

この問題に対する直感的な解法として、巡回路を全列挙するというものがあります。つまり、都市の順列を全通り試して、それぞれについて巡回路長を計算し、巡回路長が最小のものを答えとする解法です。

ここでは、この解法を実装する前準備として、順列を全列挙してみましょう。整数 n が与えられるので、{1, 2, ..., n} の順列を全て求め、出力してください。順列は 1 行に 1 つ、半角スペース区切りで出力するものとします。順列の順番は問いません。

出力に同じ順列が複数含まれている場合や、順列でないものが含まれている場合、余計な空白や空行が含まれている場合などはすべて不正解になります。

入力される値

n


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

{1, 2, ..., n} の順列を全て出力してください。各順列は半角スペース区切りで 1 行に出力してください。順列の順番は問いません。

条件

すべてのテストケースにおいて、以下の条件をみたします。
・ 入力はすべて整数
・ 2 ≦ n ≦ 8

入力例1

3

出力例1

1 3 2
2 3 1
3 1 2
2 1 3
3 2 1
1 2 3

問題一覧へ戻る

ページの先頭へ戻る