栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

200. Number of Islands 133. Clone Graph 127. Word Ladder

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

200. Number of Islands 133. Clone Graph 127. Word Ladder

200. Number of Islands

求一个途中孤岛有多少个,可以采用深度优先的方法,当遇到1的时候就把四周变成0;

BFS方法

大致思路一致也是遇到1 的时候将四周变成0, 不过采用栈来处理,需要用一个数组来控制四个方向,上下左右。当然用二维的vector也是可以。如下代码。

// directional vectors to check adjacent cells (4-directional)
vector> dirs = {{0,-1},{0,1},{-1,0},{1,0}};
// handle adjacent cells for a given cell
for (int k = 0; k < 4; k++) {
    int r = p.first + dirs[k][0];
    int c = p.second + dirs[k][1];
    if (isValidCell(r,c,m,n) && grid[r][c] == '1') {
        grid[r][c] = '0';
        q.push({r,c});
    }
}

DFS直接用递归处理

class Solution {
public:
    int offsets[5] = {0,1,0,-1,0};
    int numIslands(vector>& grid) {
        int res=0, m=grid.size(), n=grid[0].size();
        
        for(int i=0; i>& grid, int i, int j){
        if(i<0 || i>=grid.size() || j<0 || j>=grid[0].size() || grid[i][j]=='0') return;
        grid[i][j]='0';
        DFS(grid, i+1, j);
        DFS(grid, i-1, j);
        DFS(grid, i, j+1);
        DFS(grid, i, j-1);
    }
    
    void BFS(vector>& grid, int i, int j){
        grid[i][j]='0';
        queue>q;
        q.push({i,j});
        while(!q.empty()){
            pair temp = q.front(); q.pop();
            for(int k=0; k<4; k++){
                //四个方向
                int r = temp.first + offsets[k] , c = temp.second + offsets[k+1];
                if(r>=0 && r< grid.size() && c>=0 && c 
133. Clone Graph 

就是把一个图再重新复制一遍,这个数据的格式是 val 和beighbors。需要采用一个map来确定这个节点是不是已经添加进去,如果没有将节点和他的neighbors加入进去。

DFS和BFS代码


class Solution {
public:
    map mp;
    Node* cloneGraph(Node* node) {
        //广度优先
        if(node==NULL) return NULL;
        //一个节点的引用
      
        if(mp.find(node) == mp.end()){
            mp[node] = new Node(node->val, {});
            for(Node* n: node->neighbors){
                mp[node] -> neighbors.push_back(cloneGraph(n));
            }
        }
        return mp[node];
    }
    Node* cloneGraph(Node* node){
        if( node == NULL) return NULL;
        Node* copy = new Node(node->val, {});
        mp[node] = copy;
        queue q;
        q.push(node);
        while(!q.empty()){
            Node* temp = q.front(); q.pop();
            for(auto n:temp->neighbors){
                if(mp.find(n) == mp.end()){
                    mp[n] = new Node(n->val, {});
                    q.push(n);
                }
                mp[temp] -> neighbors.push_back(mp[n]);
            }
            
        }
        return copy;
    }
    
    
    
};
127. Word Ladder
class Solution {
public:
    int ladderLength(string beginWord, string endWord, vector& wordList) {
        unordered_set dict(wordList.begin(), wordList.end());
        if (dict.find(endWord) == dict.end()) return 0; //Not Found
        queue q;
        q.push(beginWord);
        int res =1;
        while(!q.empty()){
            int n=q.size();
            //只差一个字符的字符串
            for(int i=0; i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/928120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号