Codeforces #229 D2D: Inna and Sweet Matrix

2014-11-24 09:00:42 · 作者: · 浏览: 0

用BFS做的。

代码:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include
                 #include 
                 
                   #include 
                  
                    #include 
                   
                     #include 
                    
                      #include 
                     
                       #include 
                      
                        #include 
                       
                         using namespace std; #define LOCAL // 提交时注释掉 bool v[55][55]; vector < pair
                        
                          > vp[2505]; int dr[] = {0, 1, -1}; int dc[] = {1, 0, 0}; int main() { #ifdef LOCAL freopen(data.txt, r, stdin); #endif int n, m, k; cin >> n >> m >> k; int _k = k; int cnt = 0; memset(v, 0, sizeof(v)); queue < pair
                         
                           > q; q.push( make_pair(1, 1) ); map < pair 
                          
                           , vector 
                           
                            > > mp; v[1][1] = true; vp[k].push_back( make_pair(1, 1) ); mp[ make_pair(1, 1) ] = vp[k]; cnt += vp[k].size(); --k; while (k > 0) { int r = q.front().first; int c = q.front().second; q.pop(); int next_r, next_c; for (int i = 0; i < 3; i++) { next_r = r + dr[i]; next_c = c + dc[i]; if (next_r < 1 || next_r > n || next_c < 1 || next_c > m) { continue; } if (!v[next_r][next_c]) { v[next_r][next_c] = true; q.push( make_pair(next_r, next_c) ); vp[k] = mp[ make_pair(r, c) ]; vp[k].push_back( make_pair(next_r, next_c) ); mp[ make_pair(next_r, next_c) ] = vp[k]; cnt += vp[k].size(); --k; if (k <= 0) { break; } } } } printf(%d , cnt); for (int i = 1; i <= _k; i++) { int s = vp[i].size(); for (int j = 0; j < s; j++) { printf((%d, %d) , vp[i][j].first, vp[i][j].second); } printf( ); } return 0; }