2012-12-05 10 views
0

가능한 모든 순열을 생성하고 일치하는 항목이 있는지 "brute force"를 사용하는 Java 프로그램을 만들고 있습니다. 예 : G1 = "0-1 0-2 1-2 1-3 2-3"이고 G2 = "1-3 2-0 0-3 1-2 1-0"인 경우 순열→ 2310은 일치하지만→ 2013은 일치합니다.문자열을 가져 와서 배열에 넣기 Java

그래프 클래스는 그래프를 2 차원 부울 배열로 나타내야하며 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

답변

0

내가 (문자열 g1g2으로 표시) 두 그래프가 같은 경우를 결정하는 쉬운 방법이 생각 -에 대한 방법 :

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

(저를 보자 만약 내가 뭔가를 놓치고있어)

문자열을 구문 분석하고 부울 인접 매트릭스를 채우기 위해 이것을 사용하려면 다음을 할 수있다 :

  • 배열을 구성 할 공백의 인접한 인접 목록 문자열을 분리하려면 arr으로 지정하십시오.
  • 루프 위로 arr의 각 요소를 분할하여 "-"에 새 배열을 만들려면 x (각 요소에 대해 arr에 루프가 반복되므로 하나의 배열이 생성됩니다).
  • ijx의 제 1 및 제 2 요소가 truematrix[i][j] 설정 (각각) 정수로서 해석.
0

String.split()을 사용하여 공간에서 문자열을 분할하여 {0-1,0-2,1-2,1-3,2-3} 문자열 배열을 가져옵니다.

이들을 반복하고 -로 나눠 각 숫자를 가져 와서 배열에 넣을 수 있습니다. 매우 효율적이지만 간단한 예제 문자열을 구문 분석 할 수는 없습니다.

관련 문제