图与搜索总结

Posted bella2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图与搜索总结相关的知识,希望对你有一定的参考价值。

技术图片

技术图片

 

/*
// Definition for a Node.
class Node 
public:
    int val;
    vector<Node*> neighbors;

    Node() 

    Node(int _val, vector<Node*> _neighbors) 
        val = _val;
        neighbors = _neighbors;
    
;
*/
//BFS
class Solution 
public:
    Node* cloneGraph(Node* node) 
        if(node == NULL)
            return NULL;
        
        //use bfs to get all nodes
        vector<Node*> nodes = bfs(node);
        
        unordered_map<Node*, Node*> mp;
        
        // copy nodes
        for(auto nod : nodes)
            Node* clone=new Node(nod->val);   // Node* clone=new Node(nod->val,vector<Node*>());
            mp[nod] = clone;
        
        
        //copy neighbors/edges
        for(auto nod : nodes)
            Node* newNode = mp[nod];
            for(auto neighbor : nod->neighbors)
                Node* new_neigh = mp[neighbor];
                newNode->neighbors.push_back(new_neigh);
            
        
        
        return mp[node];
    
    
    vector<Node*> bfs(Node* node)
        // use queue to implement bfs
        unordered_set<Node*> visited;
        queue<Node*> q;
        vector<Node*> nodes;
        
        q.push(node);
        visited.insert(node);
        nodes.push_back(node);
        
        while(!q.empty())
            Node* cur = q.front();
            q.pop();
            for(auto neigh : cur->neighbors)
                //已经遍历过
                if(visited.find(neigh) != visited.end())
                    continue;
                
                //未遍历过
                q.push(neigh);
                visited.insert(neigh);
                nodes.push_back(neigh);
            
        
        return nodes;
    
;

 

BFS 时间复杂度:O(边数 + 点数)

 

以上是关于图与搜索总结的主要内容,如果未能解决你的问题,请参考以下文章

图与搜索

图与搜索

OO第二次总结

图与深度优先广度优先搜索

OO5~7次作业总结

设计模式从青铜到王者第二篇:UML类图与面向对象编程