#INCLUDE <비트 / STDC ++ H.>
은 USING 스페이스 STD]
[. 5] 숯 oriLights // 행렬의 상태를 저장할 수
숯 조명 [5]; // 매트릭스 램프의 변화를 구할 수
숯 결과 [5]; // 결과를 저장할 수
은 USING 스페이스 STD]
[. 5] 숯 oriLights // 행렬의 상태를 저장할 수
숯 조명 [5]; // 매트릭스 램프의 변화를 구할 수
숯 결과 [5]; // 결과를 저장할 수
GETBIT INT (C CHAR, INT I)
{창 (C >> Ⅰ) 및 1].} // 상태를 제거한다. 내가 C 문자 1 작동에 적절한 장소.
{창 (C >> Ⅰ) 및 1].} // 상태를 제거한다. 내가 C 문자 1 작동에 적절한 장소.
보이드 SETBIT (CHAR & C가 값 int // I, INT의 ⅴ) (C)은 V로 i 번째 비트 인
{IF (V) {C | = (. 1 << I)} // (V)가 1 인 경우, C는 동일하거나 i에 1을 좌측
다른
// C 나 좌측 1 비트 반전 같다 = ~ & (1 << I) (C)를
}
// C 반전 공극 FlipBit (INT I 숯 c &)를 저 비트
{
C를 ^ = (1 << I) // 비트 XOR
}
공극 OutputResult (T의 INT, 숯 결과 []) // 출력
{
COUT << "퍼즐 #"<< T << ENDL;
대 (INT I = 0 ]. I <5; I ++) {
대 (INT J = 0;. J <6; J ++) {
COUT << GETBIT (결과 [I, J),
IF (J <5) COUT << ".";
}
COUT < <ENDL}
}
INT의 main () {
INT T;
CIN >> T]
(INT 1 = T]. T <= T; t ++) {
memset 함수 (oriLights, 0는 sizeof (oriLights));
위한 (INT 난 = 0; I <5; I ++)
대 (INT J = 0; J <6; J ++) {
INT (S);
CIN >>이야;
SETBIT (oriLights [I], J는, S);
}
{IF (V) {C | = (. 1 << I)} // (V)가 1 인 경우, C는 동일하거나 i에 1을 좌측
다른
// C 나 좌측 1 비트 반전 같다 = ~ & (1 << I) (C)를
}
// C 반전 공극 FlipBit (INT I 숯 c &)를 저 비트
{
C를 ^ = (1 << I) // 비트 XOR
}
공극 OutputResult (T의 INT, 숯 결과 []) // 출력
{
COUT << "퍼즐 #"<< T << ENDL;
대 (INT I = 0 ]. I <5; I ++) {
대 (INT J = 0;. J <6; J ++) {
COUT << GETBIT (결과 [I, J),
IF (J <5) COUT << ".";
}
COUT < <ENDL}
}
INT의 main () {
INT T;
CIN >> T]
(INT 1 = T]. T <= T; t ++) {
memset 함수 (oriLights, 0는 sizeof (oriLights));
위한 (INT 난 = 0; I <5; I ++)
대 (INT J = 0; J <6; J ++) {
INT (S);
CIN >>이야;
SETBIT (oriLights [I], J는, S);
}
{- (; 64 <N- ++ N INT N- = 0)에 대한
//이 가득한 보도에서 따르지 않는 것은 스위치의 각의 열거 시작; INT = N-switchs
방어 적이기 (조명, oriLights,를 sizeof ( oriLights을)); / 빛으로 / 복사 원 데이터 조작 이동
대해 INT (I = 0;. I <5; ++ I) {
결과 [I] = switchs;
{(.; J <6 J ++ INT J = 0)에 대한
IF (GETBIT (switchs, J) / * j 번째의 비트가 1이면, 스위치 * /) {눌러
J는 가장 왼쪽 컬럼에 없으면 //)> 0 IF (j를
FlipBit (조명 [i]는, J -1) ;
FlipBit (조명 [I, J),
IF (J <5.)
FlipBit (조명 [I] + J. 1);
}
}
IF (I <4.) 다음 라인에 // 처리
등 [내가 + 1 ] ^ = switchs // 1 비트와 함께, XOR을 반전 배타적 이상이어야한다 0이 아닌 것
조명 switchs = [내가]; // switchs는 스위치 행 상태에 따라 I + 1이다. 사이클로 다음 라인의 시작
}
IF (조명 == 0 [4.]) {
OutputResult (T, 결과);
BREAK;
}
//이 가득한 보도에서 따르지 않는 것은 스위치의 각의 열거 시작; INT = N-switchs
방어 적이기 (조명, oriLights,를 sizeof ( oriLights을)); / 빛으로 / 복사 원 데이터 조작 이동
대해 INT (I = 0;. I <5; ++ I) {
결과 [I] = switchs;
{(.; J <6 J ++ INT J = 0)에 대한
IF (GETBIT (switchs, J) / * j 번째의 비트가 1이면, 스위치 * /) {눌러
J는 가장 왼쪽 컬럼에 없으면 //)> 0 IF (j를
FlipBit (조명 [i]는, J -1) ;
FlipBit (조명 [I, J),
IF (J <5.)
FlipBit (조명 [I] + J. 1);
}
}
IF (I <4.) 다음 라인에 // 처리
등 [내가 + 1 ] ^ = switchs // 1 비트와 함께, XOR을 반전 배타적 이상이어야한다 0이 아닌 것
조명 switchs = [내가]; // switchs는 스위치 행 상태에 따라 I + 1이다. 사이클로 다음 라인의 시작
}
IF (조명 == 0 [4.]) {
OutputResult (T, 결과);
BREAK;
}
}
}
}
}
}