2017-11-09 10 views
1

현재 N-Queens 문제를 해결하려고합니다. 특히 8x8 보드에서 8 명의 퀸을 타겟팅합니다.R : N-Queens와 문제가 있습니다.

첫 번째 부분은 문제입니다. 첫 번째는 여왕이 이미 매트릭스에 사전 할당되어있을 때 조각이 안전한지 여부를 결정하는 "safe" 기능입니다. 그래서 다음과 같이이 다음이

>chess.board <- matrix(data=0,8,8) 

>chess.board[r,c] <- 1 #the r,c can be any row,column I choose 

>chess.piece <- c(x,x) #the x,x could be for example two numbers that also represent a row and column 

은 안전 기능을 통해 실행합니다 :

>safe(chess.piece,chess.board) 

나는이 여러 문제가 발생하고있다. 체스 조각의 행렬, 행렬, 대각선의 합이 < 1 일 때 TRUE을 반환하거나 > 0 이상인 경우 FALSE을 반환해야 함을 이해합니다.

지금까지 내가 가진 :

>safe <- function(a,b){ 
    if((sum(b[a,])<1) & (sum(b[,a])<1)) 
    {return(TRUE) 
    }else{ 
    return(FALSE) 
    } 
} 

이 단지 행/열입니다하지만이 TRUE해야 할 때 가끔 FALSE을 반환합니다. 예를 들어, 체스 피스가 c (3,6)로 설정되고 행렬 1이 1,3에 위치 할 때 발생합니다. 그것은 체스 조각에서 3을 가져 와서 칼럼의 잘못된 값과 결합시키는 것 같습니다. 왜이 일을하는거야?

다음 부분은 체스 조각 위치에 따라 행렬의 대각선 합계를 합한 것입니다. 이것은 나를 혼란스럽게합니다.

나는 R에 상당히 익숙하며, 내가 두뇌를 고를 수 있는지 궁금해. 필자는 직접적인 해결책을 원할 필요는 없지만 올바른 방향으로 나아가는 몇 가지 조언은 정말 도움이 될 것입니다. 사전에

감사합니다, Jim.S

답변

1

색인 x을 잊어 버렸습니다. 이 기능을 사용해보십시오 :

safe <- function(x,y){ 
    if((sum(y[x[1],])<1) & (sum(y[,x[2]])<1)) 
    {return(TRUE) 
    }else{ 
    return(FALSE) 
    } 
} 
+0

감사합니다! 정말 도움이되었습니다! 할당 된 체스 피스에서 대각선 합계를 찾는 문제에 대한 해결책은 무엇입니까? 정말 그뿐만 아니라 고군분투 :) –

0

난 정말 R 측면에 말을하지만, 두 왕비가 같은 대각선에있는 여부를 결정 측면에서 할 수없는, 그 통지 :

  1. 두 왕비가 같은 앞쪽 대각선 (/과 같은)에 있으면 행과 열의 합이 항상 같습니다.

  2. 두 명의 왕비가 같은 뒤쪽 대각선에있는 경우 (마찬가지로) 행과 열의 차이가 항상 같습니다.