2011-01-18 4 views
0

테이블 대칭하므로 I는 간단한 2 개 차원 1 충전 (map로 표현) 배열, 0C++ 순열

| A | B | C | D | sum 
-------------------------- 
    A | 0 | 1 | 1 | 1 | 3 
    B | 1 | 0 | 0 | 0 | 1 
    C | 1 | 0 | 0 | 1 | 2 
    D | 1 | 0 | 1 | 0 | 1 

그것이 graph의 표현을 주 대각선 (아무 멤버도 자신과 관계가 없으며 재귀가 없습니다). 지정한 열/행의 순열을 생성해야합니다. 나는 next_permutation() 함수를 알고 있지만 그래프를 나타내는 2D 배열의 경우 사용 방법을 모르겠다. 전환을 위해 2 열/행의 인덱스를 반환하기 위해 자체 알고리즘을 작성해야한다고 생각한다. 나는 2 cols/rows를 바꿔서 전체 테이블을 다시 작성한다는 것을 알 수 없다.

가장 힘든 것은, 모든 행/열을 전환하는 것이 고유 한 합계가있는 행이있을 때 필요하지 않다는 것입니다.이 행/열 (내 경우에는 A)은 자신의 자리에 머무를 수 있습니다. 그들이 속한 두 번째 테이블의 어느 멤버에게 클리어링 (= 같은 수의 멤버가 더 이상 없다).

A-D (테이블)의 순열을 생성 할 수있게되면 생성 된 테이블을 두 번째 테이블과 비교하고 동일한 지 여부를 확인할 수 있습니다 (이미 수행 한 작업).

어떻게 순열을 수행 할 수 있습니까?

+0

원하는 것을 설명해야 할 수도 있습니다. 가능한 모든 그래프를 4 개의 정점에 나열하고 싶습니까? – wich

+0

교환 B와 D가있는 테이블을 생성해야합니다 (둘 다 하나의 관계가 있습니다) –

+0

D는 수학이 작동하지 않는 두 개의 관계가 있습니다. –

답변

0

네 개의 정점으로 설명하는 것처럼 양방향 그래프는 단지 64 가지 변형이 있습니다. 즉, 그래프에는 6 비트의 정보가 포함되어 있으므로 0에서 63까지의 숫자로 구성하는 것이 쉽습니다.