Leetcode题解

来源:互联网 发布:马云淘宝的成功 编辑:程序博客网 时间:2024/06/11 04:03

Given a 2d grid map of ‘1’s (land) and ‘0’s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

11110
11010
11000
00000

Answer: 1

Example 2:

11000
11000
00100
00011

Answer: 3

链接

DFS非递归做法,手残递归想不出,西西里上写了好久才做出来,顺手翻了下leetcode果然有
直接抄的西西里上的版本,函数名之类的懒得改了。

class Solution {public:     int countConnectedOnes(vector<vector<char> >& A) {          int szrow=A.size(),szcul=A[0].size();          int maze[szrow][szcul];          memset(maze,0,szrow*szcul*sizeof(int));          stack<int> st;          int  ispart=0,count=0;          for(int i=0;i<szrow;i++){               for(int j=0;j<szcul;j++){                   if(A[i][j]=='1' && maze[i][j]==0) {                       st.push(i);                       st.push(j);                       maze[i][j]=1;                       ispart=1;                   }                   while(!st.empty()){                       int tpj=st.top();                       st.pop();                       int tpi=st.top();                       st.pop();                       int flag=1;                       while(flag==1){                            if(tpj-1>-1 && A[tpi][tpj-1]=='1' && maze[tpi][tpj-1]==0){                                st.push(tpi);                                st.push(tpj-1);                                maze[tpi][tpj-1]=1;                            }//左                            if(tpj+1<szcul && A[tpi][tpj+1]=='1' && maze[tpi][tpj+1]==0){                                st.push(tpi);                                st.push(tpj+1);                                maze[tpi][tpj+1]=1;                            }//右                            if(tpi-1>-1 && A[tpi-1][tpj]=='1' && maze[tpi-1][tpj]==0){                                st.push(tpi-1);                                st.push(tpj);                                maze[tpi-1][tpj]=1;                            }//上                            if(tpi+1<szrow && A[tpi+1][tpj]=='1' && maze[tpi+1][tpj]==0){                                st.push(tpi+1);                                st.push(tpj);                                maze[tpi+1][tpj]=1;                            }//下                            flag=0;                        }                        ispart=1;                   }                    if(ispart) count++;                   ispart=0;               }           }           return count;                         }}; 
原创粉丝点击