Block Puzzles을 해결하기위한 알고리즘을 만들고 싶지만 최대한 효율적으로 만들고 싶습니다. 나는 이미 쉬운 길을 택했다 (역 추적).블록 퍼즐 해결 C++ 알고리즘
모든 것을 행렬로 나타 냈습니다. 조각이 꼭 들어 맞는 큰 행렬은 처음에는 0이고 조각은 공간이 꽉 찼 으면 1, 그렇지 않으면 공백이면 0입니다. 다음으로 더 효율적인 아이디어는 다음 라인으로 가기 전에 라인이 완료되었는지 항상 확인하는 것입니다. 제가 말하고자하는 것은 조각이
0 1 0
(십자 기호) 일 수 있습니다. 십자가가 구석에 있다면, 프로그램은 쓸모없는 해결책을 위해 전체 역 추적을 할 것이므로, 돌아가서 다른 것을 시도해야합니다.
1 1 1
0 1 0
필자가 말했듯이 필자는 단순한 비효율적 인 역 추적 만 했어도 코드 조각을 제공 할 수 있습니다.
더 좋은 아이디어가 있습니까? 이 경우 동적 프로그래밍을 사용할 수 있습니까?
조각을 배치 할 때 배치 된 조각의 0에 연결된 0의 수를 계산하고, 그 수가 가장 작은 배치되지 않은 조각의 1보다 적 으면 배치 된 조각이 잘못된? –
자세한 내용을 알려주십시오. 최대 크기는 얼마입니까? – blackmath
실제 문제는 아니며 단지 시험해보고 싶었습니다. 한계가 [INT_MAX/2] [INT_MAX/2]의 행렬이므로 최대 개수가 INT_MAX라고 가정 해 봅시다. 문제와 관련 없음 :) –