• Leetcode-827 Making A Large Island(最大人工岛)


      1 int x[] = {1,-1,0,0};
      2 int y[] = {0,0,1,-1};
      3 
      4 class Solution
      5 {
      6     private:
      7         int acreList[1500];
      8         int acreListEnd;
      9         int Maxresult;
     10         int rowSize;
     11         int colSize;
     12     public:
     13         int largestIsland(vector<vector<int>>& grid)
     14         {
     15             acreListEnd = 2;
     16             acreList[0] = 0;
     17             Maxresult = 1;
     18             rowSize = grid.size();
     19             colSize = grid[0].size();
     20             for(int i = 0;i < grid.size();i ++)
     21             {
     22                 for(int j = 0;j < grid[0].size();j ++)
     23                 {
     24                     int tmpAcre = 0;
     25                     if(grid[i][j] == 1)
     26                     {
     27                         preDfs(i,j,grid,tmpAcre);
     28                         acreList[acreListEnd ++] = tmpAcre;
     29                     }
     30                 }
     31             }
     32             
     33             /*
     34             for(int i = 0;i < rowSize;i ++)
     35             {
     36                 for(int j = 0;j < colSize;j ++)
     37                 {
     38                     cout << grid[i][j] << " " ;
     39                 }
     40                 cout << endl;
     41             }
     42             */
     43         //    cout << acreList[3] << endl;
     44         //    memset(0,visit,sizeof(visit));
     45             int flag = 0;
     46             for(int i = 0;i < grid.size();i ++)
     47             {
     48                 for(int j = 0;j < grid[0].size();j ++)
     49                 {
     50                     if(grid[i][j] == 0)
     51                     {
     52                         Dfs(i,j,grid);
     53                         flag = 1;
     54                     }
     55                 }
     56             }
     57             if(!flag)
     58                 Maxresult = rowSize*colSize;
     59             return Maxresult;
     60         }
     61         bool limit(int a,int b)
     62         {
     63             return (a>=0 && a<rowSize && b>=0 && b<colSize);
     64         }
     65         void preDfs(int curX,int curY,vector<vector<int>>& grid,int &acre)
     66         {
     67             acre ++;
     68             grid[curX][curY] = acreListEnd;
     69             for(int i = 0;i < 4;i ++)
     70             {
     71                 if(limit(curX+x[i],curY+y[i]) && grid[curX+x[i]][curY+y[i]] == 1)
     72                 {
     73                     preDfs(curX+x[i],curY+y[i],grid,acre);
     74                 }
     75             }
     76         }
     77         void Dfs(int curX,int curY,vector<vector<int>> grid)
     78         {
     79             int result[4] = {0};
     80             for(int i = 0;i < 4;i ++)
     81             {
     82                 int flag = 1;
     83                 if(limit(curX+x[i],curY+y[i]))
     84                 {
     85                     for(int j = 0;j < i;j ++)
     86                     {
     87                         if(result[j]==grid[curX+x[i]][curY+y[i]])
     88                         {
     89                             flag = 0;
     90                             break;
     91                         }
     92                     }
     93                     if(flag)
     94                         result[i] = grid[curX+x[i]][curY+y[i]];
     95                     else
     96                         result[i] = 0;
     97                 }
     98                 else
     99                     result[i] = 0;
    100             }
    101             for(int i = 0;i < 4;i ++)
    102                 result[i] = acreList[result[i]];
    103             sort(result,result+4);
    104             if(result[0]+result[1]+result[3]+result[2]+1>Maxresult)
    105             {
    106                 Maxresult = result[0]+result[1]+result[3]+result[2]+1;
    107             }
    108             cout << result[2] << " " << result[3] << endl;
    109         }
    110 };
  • 相关阅读:
    未登录词识别方法研究公布硕士论文最新进展五(2007.4.26)
    公布硕士论文最新进展一(2007.3.6)
    对于切分歧义以及识别未登录词的随想公布硕士论文最新进展四(2007.4.13)
    一则杂感一次医院项目的感悟
    公布硕士论文最新进展三(2007.3.26)
    毕业典礼7.1
    家乡风光
    还在深圳!
    经历摩托罗拉
    又回来了,南京!
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9771714.html
Copyright © 2020-2023  润新知