zoukankan      html  css  js  c++  java
  • Surrounded Regions [未完成]

    思路完全一样

    AC的代码:

     1 class Solution {
     2     private:
     3         struct Point {
     4             int x, y;
     5             Point(int _x, int _y):x(_x), y(_y) {}
     6         };
     7     public:
     8         void solve(vector<vector<char> > & board) {
     9             const int M = board.size();
    10             if (M <= 2) return;
    11             const int N = board[0].size();
    12             vector<Point> run; // 没被包含的O,判断后修改为D来标记
    13             for (int i=0; i<M; ++i)     // 1 边界
    14                 for (int j=0; j<N; ++j) 
    15                     if ((i==0 || i==M-1 || j==0 || j==N-1) && board[i][j]=='O') { 
    16                         board[i][j] = 'D';
    17                         run.push_back(Point(i, j));
    18                     }
    19 
    20             const static int PATH[4][2] = {{0,1},{0,-1},{-1,0},{1,0}};
    21             while (!run.empty()) {      // 2 out -> insider
    22                 Point p = run.back();
    23                 run.pop_back();
    24                 for (int i=0; i<4; ++i) {
    25                     int x = p.x+PATH[i][1];
    26                     int y = p.y+PATH[i][0];
    27                     if (x<0 || x>=M || y<0 || y>= N || board[x][y]!='O')
    28                         continue;
    29                     board[x][y] = 'D';
    30                     run.push_back(Point(x, y));
    31                 }
    32             }
    33 
    34             for (int i=0; i<M; ++i)     // 3 检查
    35                 for (int j=0; j<N; ++j) {
    36                     if (board[i][j]=='X') continue;
    37                     board[i][j] = (board[i][j]=='O'?'X':'O');
    38                 }
    39         }
    40 };

    时间通不过的代码:

     1 class Solution {
     2 public:
     3     void solve(vector<vector<char>> &board) {
     4         int size = board.size();
     5         if (size < 3)
     6             return;
     7   
     8         for (int j = 0; j < size; ++j) {
     9             if (board[0][j] == 'O') {
    10                 board[0][j] == '1';
    11                 judgeRegion(board, 1, j);
    12             }
    13             
    14             if (board[size-1][j] == 'O') {
    15                 board[size-1][j] == '1';
    16                 judgeRegion(board, size-2, j);
    17             }
    18         }
    19         
    20         for (int i = 1; i < size - 1; ++i) {
    21             if (board[i][0] == 'O') {
    22                 board[i][0] == '1';
    23                 judgeRegion(board, i, 1);
    24             }
    25             
    26             if (board[i][size-1] == 'O') {
    27                 board[i][size-1] == '1';
    28                 judgeRegion(board, i, size - 2);
    29             }            
    30         }
    31 
    32         for (int i = 0; i < size; ++i) {
    33             for (int j = 0; j < size; ++j) {
    34                 if (board[i][j] == 'O')
    35                     board[i][j] = 'X';
    36                 if (board[i][j] == '1')
    37                     board[i][j] == 'O';
    38             }
    39         }
    40     }
    41     
    42     void judgeRegion(vector<vector<char>> &board, int i, int j) {
    43         int size = board.size();
    44         if (i >= 0 && j < size && board[i][j] == 'O') {
    45             board[i][j] == '1';
    46             judgeRegion(board, i-1, j);
    47             judgeRegion(board, i+1, j);
    48             judgeRegion(board, i, j-1);
    49             judgeRegion(board, i, j+1);
    50         }
    51     }
    52 
    53 };
  • 相关阅读:
    大四实习几个课题
    Keil 4 与Proteus 7.8联调
    局域网共享
    win 8.1 网卡
    路由器无线桥接 router wireless bridge
    系统对话框alert-prompt-confirm
    处理浏览器兼容性
    pageX--clientX--scrollLeft-clientLeft-offsetWidth
    处理注册事件的兼容性问题
    处理innerText的兼容性问题
  • 原文地址:https://www.cnblogs.com/huxiao-tee/p/4229984.html
Copyright © 2011-2022 走看看