すべての順列を生成して、グラフが同型であるかどうかを確認する必要があります。この順列クラスを使用しているので、グラフを2Dブール配列として表すグラフクラスを作成する必要があります。例として、ユーザーが2つのグラフに文字列として入力する場合があります
Ex."0-1 0-2 1-2 1-3 2-3" and "1-3 2-0 0-3 1-2 1-0"
今、私のコンストラクターでは、それを分割して2Dブール配列に配置する必要があります。どうすればいいですか?
ユーザーは、「0-1 1-2 2-3 3-0 0-4 0-11 1-5 1-6 2-7 2-8 3-93-104-5」のようなもっと複雑なものを入力することもできます。 6-7 8-9 10-11 4-7 4-8 5-9 5-10 6-9 6-10 7-118-11"および"0-11-2 2-3 3-0 0- 4 0-7 1-4 1-5 2-5 2-6 3-6 3-7 4-8 4-9 5-9 5-10 6-10 6-11 7-8 7-11 8-9 9 -10 10-11 11-8 "
public class PermutationGenerator
{
// private data
private int[] perm;
private boolean first;
// constructor
public PermutationGenerator (int n)
{
perm = new int [n];
first = true;
}
public int[] next ()
{
int n = perm.length;
// starting permutation: 0 1 2 3 ... n-1
if (first)
{
first = false;
for (int i = 0 ; i < n ; i++)
perm [i] = i;
return perm;
}
// construct the next permutation
// find largest k so that perm[k] < perm[k+1]; if none, finish
int i, j, k, l;
for (k = n - 2 ; k >= 0 && perm [k] >= perm [k + 1] ; k--)
;
if (k < 0)
return null; // no more
// find largest l so that perm[k] < perm[l]
for (l = n - 1 ; l >= 0 && perm [k] >= perm [l] ; l--)
;
// swap perm[k] and perm[l]
swap (perm, k, l);
// reverse perm[k+1]...perm[n-1]
for (i = k + 1, j = n - 1 ; i < j ; i++, j--)
swap (perm, i, j);
return perm;
}
// swap a[i] and a[j]
private static void swap (int a[], int i, int j)
{
int temp = a [i];
a [i] = a [j];
a [j] = temp;
}
}