kirin 980 还行
첫째, 5 % 자신의 시간을 쓰기, 5 % 공간, 쓰레기 코드
1 BOOL 확인 (벡터 <벡터 < INT >> 그리드 의 INT m, INT의 N) 2 { 3 부울 입술 = 참 ; 4 에 대해 ( int로 난 = 0 ; i가 grid.size ()을 <; 내가 ++ ) 5 { 6 대 ( INT의 J = 0 ; J <표 [ 0 ] 크기는 ()을, J ++ ) 7 { 8 경우 (표 [I] [J] == 0 ) (9) { 10 입술 =거짓 ; (11) 휴식 ; 12 } 13 } 14 } 15 리턴 입술; 16 } 17 INT의 사용 (벡터 <벡터 < INT >> 그리드 의 INT m, INT의 N) 18 { 19 의 경우 (m <grid.size () && N <표 [ 0 ] 크기는 () && 격자 [m] N] == 2 ) 20 리턴 2 ; (21) 그 밖의 경우 (m <grid.size () && N <표 [ 0 ] 크기는 () && (그리드 [m] [n]을 == 0그리드 || [m] [N] == 1 )) 22 { 23 창 1 ; 24 } 25 다른 26 리턴 - 1 ; 27 } 28 빈 백 (벡터 <벡터 < INT >> 및 그리드, INT 및 입술, INT의 m, INT의 N) 29 { 30 의 경우 (사용 (그리드, m, N) == 1 ) 31 { 32 그리드 [m] [N] = - 1 ; 33 m ++ ; (34) 백 (격자, 입술, m, N); 35 M-- ; 36 그리드 [m] [N] = 0 ; 37 38 표 [m] [N] = - 1 ; 39 N ++ ; (40) 위로 (격자, 입술, m, N); 41 N-- ; 42 그리드 [m] [N] = 0 ; 43 44 표 [m] [N] = - 1 ; 45 M-- ; (46) 위로 (격자, 입술, m, N); (47) m ++ ; 48 그리드 [m] [N] = 0; 49 50 표 [m] [N] = - 1 ; 51 N-- ; (52) 위로 (격자, 입술, m, N); 53 N ++ ; 54 그리드 [m] [N] = 0 ; (55) } (56) 그 밖의 경우 (사용 (그리드, m, N) == 2 && 확인 (격자, m, N)) (57) 입술 ++ ; 58 다른 59 창 ; 60 } 61 INT uniquePathsIII (벡터 <벡터 < INT >> 및 그리드) { 62 INT입술 = 0 ; 63 의 경우 (grid.size () == 0 ) 64 리턴 0 ; 65 INT의 m = 0 , N = 0 ; (66) 에 대한이 ( int로 난 = 0 ; i가 grid.size ()을 <; 내가 ++ ) 67 { 68 대 ( INT의 J = 0 ; J <표 [ 0 ] 크기는 ()를; J를 ++ ) 69 { 70 의 경우 (표 [I] [J] == 1 ) 71 { 72 m = I; (73) N = J; 74 체류 ; 75 } 76 } 77 } 78 백 (격자, 입술, m, N); (79) 반송 입술; 80 }
둘째, 문제 해결 방법
해밀턴, 동적 프로그래밍