игра Лос-P2658 Valley Rally

тема Портал

Проблема решения идеи:

Половина ответа, то BFS проверки, если вы можете охватить все другие знаки от дорожного знака, то ответ возможно. Знает, где можно найти самый лучший ответ.

AC код:

1 #include <iostream>
 2 #include <cstdio>
 3 #include <CMATH>
 4 #include <CString>
 5 #include <очереди>
 6  
7 с  использованием  пространства имен станд;
8  
9  INT м, п, а [ 501 ] [ 501 ], L, R, пит, сумма, ANS, в середине;
10  INT дх [] = {- 1 , 1 , 0 , 0 }, Dy [] = { 0 , 0 , 1 , - 1 }; 
11  BOOL отношению [ 501 ] [ 501], v [ 501 ] [ 501 ], флаг, с;
12  
13 инлайн BOOL проверка ( INT Len, INT х, INT у) {
 14      очереди < INT > д, q 1;
15      q.push (х);
16      q1.push (у);
17      v [х] [у] = 1 ;
18 в      то время как (! {Q.empty ())
 19          х = q.front ();
20          у = q1.front ();
21          q.pop ();
22          q1.pop ();
23 ,          если( по отношению [х] [у] == 1 ) Num ++ ;
24 ,          если (число == сумма) возвращают  верно ;
25          для ( INT I = 0 ; г < 4 ; я ++ ) {
 26              INT хх = х + дх [I];
27              INT уу = у + Dy [I];
28 ,              если (ABS (а [хх] [уу] - это [х] [у])> LEN) продолжить ;
29 ,              если (хх < 1 || хх> т || уу < 1 || уу> п) продолжить ;
30 ,              если (! V [хх] [уу]) {
 31                 q.push (хй);
32                  q1.push (уу);
33                  v [хх] [уу] = 1 ;
34              }
 35          }
 36      }
 37      возвращение  ложным ;
38  }
 39  
40  INT основных () {
 41      INT х, у;
42      зсапЕ ( " % d% d " , & м, & п);
43      для ( INT I = 1 ; я <= т; я ++ )
 44          для ( INT J = 1; J <= п; j ++ ) {
 45              зсапЕ ( " % d " , & [I] [J]);
46              г = тах (г, а [I] [J]);
47          }
 48      для ( INT I = 1 ; я <= т; я ++ )
 49          для ( INT J = 1 , J <= N; j ++ ) {
 50              INT и;
51              зсапЕ ( " % d " , & и);
52 ,              если (и == 1 ) 
 53 по                  отношению [I] [J] =1 , сумма ++, х = х, у = J;
54          }
 55 ,      а (л < г) {
 56          среднего = (L + R) / 2 ;
57          MemSet (v, 0 , SizeOf (v));
58          флаг = ложь ;
59          Num = 0 ;
60 ,          если (проверка (середина, х, у))
 61              г = середина, ANS = середина;
62          еще 
63              л = середина + 1 ;
64      }
 65      Е ( " % d" , Год);
 66      возвращения  0 ;
 67 }

 

рекомендация

отwww.cnblogs.com/lipeiyi520/p/11780093.html