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 };

 

posted @ 2018-10-11 12:11  Asurudo  阅读(281)  评论(0编辑  收藏  举报