搜索+回溯
79(单词搜索)
class Solution {
public:
int m,n,d[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
vector<vector<bool>> visited;
bool inarea(int x,int y){
return x>=0 && x<m && y>=0 && y<n;
}
bool searcharea(const vector<vector<char>> &board,const string& word,int index,int startx,int starty){
if(index==word.size()-1)
return board[startx][starty] == word[index];
if(board[startx][starty]==word[index]){
visited[startx][starty]=true;
for(int i=0;i<4;i++){
int newx=startx+d[i][0];
int newy=starty+d[i][1];
if(inarea(newx,newy) && !visited[newx][newy] && searcharea(board,word,index+1,newx,newy) )
return true;
}
visited[startx][starty] =false;
}
return false;
}
bool exist(vector<vector<char>>& board, string word) {
m=board.size();
n=board[0].size();
visited=vector<vector<bool>>(m,vector<bool>(n,false));
for(int i=0;i<board.size();i++)
for(int j=0;j<board[i].size();j++)
if(searcharea(board,word,0,i,j))
return true;
return false;
}
};
200(连通岛屿数量,floodfill算法)
class Solution {
public:
int m,n,d[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
vector<vector<bool>> visited;
bool inarea(int x,int y){
return x>=0 && x<m && y>=0 && y<n;
}
void dfs(vector<vector<char>> &grid,int x,int y){
visited[x][y]=true;
for(int i=0;i<4;i++){
int newx=x+d[i][0];
int newy=y+d[i][1];
if(inarea(newx,newy)&&!visited[newx][newy]&&grid[newx][newy]=='1')
dfs(grid,newx,newy);
}
return;
}
int numIslands(vector<vector<char>>& grid) {
m=grid.size();
if(m==0)
return 0;
n=grid[0].size();
visited=vector<vector<bool>>(m,vector<bool>(n,false));
int res=0;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(grid[i][j]=='1'&&!visited[i][j]){
res++;
dfs(grid,i,j);
}
return res;
}
};
130
417

浙公网安备 33010602011771号