외로운 섬


10

입력:

두 개의 고유 한 (선택적) 값을 포함하는 2D 배열입니다. 규칙을 설명 할 때 01을 사용하겠습니다 . 입력 형식은 물론 유연합니다.


도전:

0은 물이고 1은 섬입니다. 외로움을 보장하기 위해 작업은 0의 행과 열을 삽입하여 모든 섬을 물로 둘러싸는 것입니다. 물을 낭비하고 싶지 않으므로 추가되는 물의 양을 최소화해야합니다. 같은 양의 물을 추가해야하는 용액이 두 개 이상인 경우 행이 아닌 물을 추가해야합니다. 테스트 사례에서 이것을 보여 드리겠습니다.


산출:

새롭게 수정 된 2D 어레이. 출력 형식은 물론 유연합니다.


테스트 사례 :

입력과 출력은 대시로 구분됩니다. 추가 된 0은 굵은 글꼴로 표시됩니다. 테스트 사례를보다 편리한 형식으로 변환하려면 여기 에있는 답변 중 하나를 사용하십시오 .

1
---
1

1 1
---
1 0 1

1 1
1 1
---
1 0 1
0 0 0
1 0 1

1 0
0 1
---
1 0 0
0 0 1

우리는 0의 행이 아닌 0의 열을 추가했습니다. 필요한 0의 수가 같고 열이 선호되기 때문입니다.


1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
---
1 0 0 0 1
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 1 0 1 0

우리는 열이 아닌 행을 추가 했으므로 최소 0이 필요합니다.


0 0 1 0 0
0 1 1 1 0
---
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 1 0 1 0 1 0

이를 위해서는 열과 행이 모두 필요했습니다.


0 0 1 0 0
0 1 0 1 0
---
0 0 0 1 0 0 0
0 1 0 0 0 1 0

물이 덜 필요하므로 한 열보다 두 개의 열을 추가하는 것이 좋습니다.


0 0
1 0
0 1
1 0
0 0
---
0 0 
1 0
0 0 
0 1 
0 0 
1 0
0 0

물이 덜 필요하므로 하나의 열보다 두 개의 행을 추가하는 것이 좋습니다.



Damnit, Stewie, 이제 "Jack Sparrow"가 다시 내 머리에 붙어 있습니다!
Shaggy

이 문제는 이분 그래프의 정점 커버 문제와 동일하며 Wikipedia 에 따르면 다항식 시간으로 해결할 수 있습니다.
user202729

나는 마음을 바꿨다. 어쨌든 충분히 큰 정사각 행렬의 경우 (희망적으로) 동일합니다. 따라서 알고리즘이 "너무 단순"하면 주의하십시오 .
user202729

다항식 시간 알고리즘이 있다고 생각합니다.
user202729

답변:


2

젤리 , 37 바이트

ṫƤ-S€ZƊ⁺FỊẠ
Z_,,WƲ€ŒpẎ€Ʋ⁺€ẎLÞFL$ÞṚÇÞṪ

온라인으로 사용해보십시오!

정수의 2D 배열을 반환하는 함수입니다. Jelly 싱글 톤 목록에서 자연스럽게 값으로 표시되므로 G출력 형식을 지정하는 데 사용됩니다.


  • 링크 1 : 반환 (유효성).
  • 링크 2 : 메인 프로그램.

프로그램은 지수 시간으로 실행되지만 지금까지는 다항식 시간 알고리즘을 생각할 수 없었습니다. ƤDyadic 기능을 사용 하며이 기능은 도전 과제를 게시합니다.


2

파이썬 (2) , 374 (346) 340 339 323 317 바이트

R=range;L=len
def f(a):
 w,h=L(a[0]),L(a);W=[]
 for i in R(2**w):
	A=zip(*a)
	for c in R(w):A[-c:-c]=[[0]*h]*(i&1<<c>0)
	for j in R(2**h):
	 B=zip(*A);x=L(B[0])
	 for r in R(h):B[-r:-r]=[(0,)*x]*(j&1<<r>0)
	 y=L(B);W+=[(w*h-x*y,x,B)]*all(sum(B[i][j:j+2]+B[i+1][j:j+2])<2for i in R(y-1)for j in R(x))
 return max(W)[2]

온라인으로 사용해보십시오!


나는 [:]출력에 영향을 미치지 않고 첫 번째 를 제거 할 수 있다고 생각합니다 .
user202729

@ user202729, 감사합니다. 가능하다고 생각합니다. 나는 그 동안 그것을 변경했다 :)
TFeld
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.