将字符串放入数组Java
问题描述:
我正在制作一个java程序,它将使用“蛮力”通过生成所有可能的排列并检查是否有匹配。例如:如果G1 =“0-1 0-2 1-2 1-3 2-3”并且G2 =“1-3 2-0 0-3 1-2 1-0”,那么置换0123→2310不会匹配,但0123→2013确实匹配。将字符串放入数组Java
我需要制作一个图类,它将图表表示为一个二维布尔数组,并具有成员函数来检查2个顶点是否为边并打印图。构造函数应该使用上面的代表边的列表的字符串。
我需要知道如何以该格式的字符串并将其放入数组中。总之,我想知道这两个图是否是同构的。
下面的代码是置换生成器。
// Generator of all permutations of: 0,1,2,...,n-1
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;
}
}
答
我觉得还有一个更简单的方法来确定两个图(由字符串g1
和g2
表示)是相同的 - 怎么样:
new HashSet<String>(Arrays.asList(g1.split(" "))).equals(
new HashSet<String>(Arrays.asList(g2.split(" ")))
(让我知道我是否遗漏了一些东西)
如果你仍然想分析字符串并用它来填充一个布尔型的邻接矩阵,你可以这样做:
- 将空格上的邻接列表字符串拆分以形成一个数组,称之为
arr
。 - 在
arr
上循环,将"-"
上的每个元素分开以形成一个新数组,将其称为x
(因为您正在循环它,所以将为每个元素arr
生成一个这样的数组)。 - 设置为
matrix[i][j]
至true
,其中i
和j
分别为x
(分别)被解析为整数的第一和第二元素。
答
使用String.split()分割字符串以获得一个字符串数组{0-1,0-2,1-2,1-3,2-3}。
循环遍历这些并分割 - 拉出每个数字,然后将其放入数组中。不是非常有效但简单的方法来解析您的示例字符串。
为什么你需要'G1'和'G2'?会不会只有一个足够? – irrelephant
等待,因此您试图确定图形“G1”是否与图形“G2”相同? – arshajii
你的问题是什么? – Dmitri