Poj_1222
The first question of Gaussian elimination is basically an imitation. Because the question is not explained without explanation, and special judge is not used, you should do it in the case of a unique solution.
Of course, this question can also be solved through enumeration of the first row of operation + search. For some ideas, refer to my poj_1753 Problem Solving Report: http://www.cnblogs.com/staginner/archive/2011/10/29/2228784.html.
# Include <stdio. h> # Include < String . H> # Include <Iostream> # Define Maxd 35 Using Namespace STD; Int DX [] = { 0 ,- 1 , 1 , 0 , 0 }, Dy [] = { 0 , 0 , 0 ,- 1 , 1 }; Int Mat [maxd] [maxd], ANS [maxd]; Void Init (){ Int I, J, K, X, Y; memset (mat, 0 , Sizeof (MAT )); For (I = 0 ; I < 30 ; I ++ ) Scanf ( " % D " , & Mat [I] [30 ]); For (I = 0 ; I < 5 ; I ++ ) For (J = 0 ; J < 6 ; J ++ ) For (K = 0 ; K < 5 ; K ++ ) {X = I + dx [K], y = J + Dy [k]; If (X> = 0 & X < 5 & Y> = 0 & Y < 6 ) Mat [I * 6 + J] [x * 6 + Y] = 1 ;}} Void Gauss (){ Int I, J, K; For (I = 0 ; I < 30 ; I ++ ){ If (MAT [I] [I] = 0 ){ For (J = I + 1 ; J < 30 ; J ++ ) If (MAT [J] [I]) { For (K = I; k <= 30 ; K ++ ) Swap (MAT [I] [K], mat [J] [k]);} For (J = I + 1 ; J < 30 ; J ++ ) If (MAT [J] [I]) { For (K = I; k <= 30 ; K ++) Mat [J] [k] ^ = Mat [I] [k] ;}} Void Solve (){ Int I, J; Gauss (); For (I = 29 ; I> = 0 ; I -- ) {Ans [I] = Mat [I] [ 30 ]; For (J = I + 1 ; J < 30 ; J ++ ) Ans [I] ^ = Mat [I] [J] * Ans [J];} For (I = 0 ; I < 5 ; I ++ ) {Printf ( " % D " , ANS [I * 6 ]); For (J = 1 ; J < 6 ; J ++ ) Printf ( " % D " , ANS [I * 6 + J]); printf ( " \ N " );}} Int Main (){ Int T, TT; scanf ( " % D " ,& T ); For (Tt = 0 ; TT <t; TT ++ ) {Init (); printf ( " Puzzle # % d \ n " , Tt + 1 ); Solve ();} Return 0 ;}