将字符串放入数组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; 
} 

}

+0

为什么你需要'G1'和'G2'?会不会只有一个足够? – irrelephant

+0

等待,因此您试图确定图形“G1”是否与图形“G2”相同? – arshajii

+0

你的问题是什么? – Dmitri

我觉得还有一个更简单的方法来确定两个图(由字符串g1g2表示)是相同的 - 怎么样:

new HashSet<String>(Arrays.asList(g1.split(" "))).equals(
           new HashSet<String>(Arrays.asList(g2.split(" "))) 

(让我知道我是否遗漏了一些东西)

如果你仍然想分析字符串并用它来填充一个布尔型的邻接矩阵,你可以这样做:

  • 将空格上的邻接列表字符串拆分以形成一个数组,称之为arr
  • arr上循环,将"-"上的每个元素分开以形成一个新数组,将其称为x(因为您正在循环它,所以将为每个元素arr生成一个这样的数组)。
  • 设置为matrix[i][j]true,其中ij分别为x(分别)被解析为整数的第一和第二元素。

使用String.split()分割字符串以获得一个字符串数组{0-1,0-2,1-2,1-3,2-3}。

循环遍历这些并分割 - 拉出每个数字,然后将其放入数组中。不是非常有效但简单的方法来解析您的示例字符串。