나는 스도쿠 생성기가있다. 내 알고리즘은 다음과 같습니다LINQ 대각선 스도쿠 필러
- 가 유효한 채워진 9 × 9 격자를 만들 수와 전체 스도쿠 그리드를 입력합니다.
- 특정 숫자를 제거하십시오.
- 해결할 수 있는지 확인하십시오.
- 사용 된 기술의 난이도에 따라 인간의 풀기 기술 및 속도 난이도 구현으로이를 해결하십시오.
문제는 내 무력 알고리즘은 일반 스도쿠를 위해 완벽하게 작동 단계에서,하지만 난 대각선 스도쿠를 만들려고 할 때에 발생 시간 증가 (그리드의 대각선이 각각도 고유 한 번호가 필요) 의사록. 이것은 받아 들일 수 없다.
그래서 좋은 해결책은 linq를 사용하여 그리드를 채우는 것입니다.
내 생각은 다음과 같습니다 가능한 모든 세포와 값의
- 만들기 모음 (81 개 위치, 9 개 가능한 값 각각).
지금과 같은 queryes의 질의의 일종 만들 : 가능한 모든 세포에서
- 을, 각각의 위치가 정확히 한 번만 존재한다. (예를 들어, 한 번, 한 번 세포 1,1 0,0 셀).
- 각 셀 값 (1-9)
- 반환 조합마다
에게 랜덤이어야한다 (셀 대각선 상에있는 경우 또는 대각선)의 행 셀과 사각형에서 고유해야 나는 더 나은 해결책이 있다고 확신한다. 그러나 나는 아직 보지 못했다. linq을 가진 나의 기술은 상당히 제한되어 있으므로, 나는 올바른 방향으로 나를 가리켜 주신 것에 매우 감사 할 것이다. 고맙습니다.
Linq는이 알고리즘을 빠르게하지 않습니다. Linq는 주로 코드 작성을보다 편리하게 만들어주는 함수 모음입니다. 이러한 편의성은 (일반적으로 IEnumerable에 적용되기 때문에) 일반성 때문에 성능 비용이 발생합니다. (알고리즘을 다시 작성하고 싶지 않다면 좀 더 효율적인 방법입니다.) 알고리즘을 10 배 병렬 처리하는 것이 좋습니다. 방법에 대한이 MSDN 도움말을 확인하십시오. http://msdn.microsoft.com/en-us/library/dd460720.aspx –
+1 잘 평행 할 수있는 문제처럼 보입니다. 사실 때로는 linq가 결코 다루지 않을 다양한 문제를 마술처럼 해결하는 것으로 생각됩니다. 하지만 성능 비용이 항상 사실 인 것은 아닙니다. 예를 들어, Except()와 같은 집합 연산은 직접 코딩 된 중첩 된 foreach 루프 (내가 할 때 :)입니다.). –
Vojtech, [codereview] (http://codereview.stackexchange.com/faq)에서 코드를 공유하고 싶을 수 있습니다. –