Una pregunta del día: 133. Imagen clonada

133. Clonar gráfico

Algoritmo de búsqueda amplia

1. Utilice una tabla hash visitada para almacenar todos los nodos que se han visitado y clonado. La clave en la tabla hash es el nodo en el gráfico original y el valor es el nodo correspondiente en el gráfico clonado.

2. Agregue el nodo dado por el título a la cola. Clone el nodo y guárdelo en la tabla hash.

3. Saque un nodo del encabezado de la cola cada vez y recorra todos los puntos vecinos del nodo. Si se ha visitado un punto vecino, el punto vecino debe estar en visitado, luego el punto vecino se obtiene de visitado, de lo contrario, se crea un nuevo nodo y se almacena en visitado, y el punto vecino se agrega a la cola. Agregue el punto de adyacencia clonado a la lista de adyacencia del nodo correspondiente en el gráfico de clonación. Repita las operaciones anteriores hasta que la cola esté vacía, luego finaliza todo el recorrido del gráfico.

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> neighbors;
    
    Node() {
        val = 0;
        neighbors = vector<Node*>();
    }
    
    Node(int _val) {
        val = _val;
        neighbors = vector<Node*>();
    }
    
    Node(int _val, vector<Node*> _neighbors) {
        val = _val;
        neighbors = _neighbors;
    }
};
*/

class Solution {
public:
    Node* cloneGraph(Node* node) {
        if (node==NULL) return NULL;

        unordered_map<Node*, Node*> vis;
        queue<Node*> q;
        q.push(node);
        Node* clonenode = new Node(node->val);
        vis[node] = clonenode;

        while (!q.empty())
        {
            Node* tmp = q.front();
            q.pop();
            Node* clonetmp = vis[tmp];
            for (auto & neighbor:tmp->neighbors)
            {
                if (vis.find(neighbor)==vis.end())
                {
                    vis[neighbor] = new Node(neighbor->val);
                    q.push(neighbor);
                }
                clone.tmp->neighbors.push_back(vis[neighbor])
            }
            
        }
        return clonenode;

    }
};

 

Supongo que te gusta

Origin blog.csdn.net/hbhhhxs/article/details/107958940
Recomendado
Clasificación