Imprimir todos los Nodes vecinos dentro de la distancia K

Dada una gráfica de N Nodes, E aristas, un Node X y una distancia K . La tarea es imprimir todos los Nodes dentro de la distancia K de X.

Aporte: 
 

Salida: 4 5 2 7 3
Los Nodes vecinos dentro de la distancia 2 del Node 4 son: 4 5 2 7 3 
 

Aproximación: 
Para imprimir todos los Nodes que se encuentren a una distancia K o inferior a K . Podemos hacerlo aplicando la variación dfs , que toma el Node K desde donde tenemos que imprimir la distancia hasta la distancia K. 

dfs(K, node, -1, tree)

Aquí -1 indica el padre del Node. 
Esta función recursiva básicamente imprime el Node y luego llama al dfs(K-1, vecino del Node, Node, árbol)
La condición base es K>0.

A continuación se muestra la implementación del enfoque anterior:  

C++

// C++ program to print
// the nearest K neighbour
// nodes (including itself)
#include <bits/stdc++.h>
using namespace std;
 
// Structure of an edge
struct arr {
    int from, to;
};
 
// Recursive function to print
// the neighbor nodes of a node
// until K distance
void dfs(int k, int node,
         int parent,
         const vector<vector<int> >& tree)
{
 
    // Base condition
    if (k < 0)
        return;
 
    // Print the node
    cout << node << ' ';
 
    // Traverse the connected
    // nodes/adjacency list
    for (int i : tree[node]) {
 
        if (i != parent) {
 
            // node i becomes the parent
            // of its child node
            dfs(k - 1, i, node, tree);
        }
    }
}
 
// Function to print nodes under
// distance k
void print_under_dis_K(struct arr graph[],
                       int node, int k,
                       int v, int e)
{
 
    // To make graph with
    // the given edges
    vector<vector<int> > tree(v + 1,
                              vector<int>());
 
    for (int i = 0; i < e; i++) {
        int from = graph[i].from;
        int to = graph[i].to;
 
        tree[from].push_back(to);
        tree[to].push_back(from);
    }
 
    dfs(k, node, -1, tree);
}
 
// Driver Code
int main()
{
 
    // Number of vertex and edges
    int v = 7, e = 6;
 
    // Given edges
    struct arr graph[v + 1] = {
        { 2, 1 },
        { 2, 5 },
        { 5, 4 },
        { 5, 7 },
        { 4, 3 },
        { 7, 6 }
    };
 
    // k is the required distance
    // upto which are neighbor
    // nodes should get printed
    int node = 4, k = 2;
 
    // function calling
    print_under_dis_K(graph, node, k, v, e);
 
    return 0;
}

Java

// Java program to print
// the nearest K neighbour
// nodes (including itself)
import java.util.*;
 
@SuppressWarnings("unchecked")
class GFG{
      
// Structure of an edge
public static class arr
{
    public int from, to;
     
    public arr(int from, int to)
    {
        this.from = from;
        this.to = to;
    }
};
  
// Recursive function to print
// the neighbor nodes of a node
// until K distance
static void dfs(int k, int node,
                int parent, ArrayList []tree)
{
     
    // Base condition
    if (k < 0)
        return;
  
    // Print the node
    System.out.print(node + " ");
      
    ArrayList tmp = (ArrayList)tree[node];
      
    // Traverse the connected
    // nodes/adjacency list
    for(int i : (ArrayList<Integer>)tmp)
    {
        if (i != parent)
        {
             
            // Node i becomes the parent
            // of its child node
            dfs(k - 1, i, node, tree);
        }
    }
}
  
// Function to print nodes under
// distance k
static void print_under_dis_K(arr []graph,
                              int node, int k,
                              int v, int e)
{
     
    // To make graph with
    // the given edges
    ArrayList []tree = new ArrayList[v + 1];
      
    for(int i = 0; i < v + 1; i++)
    {
        tree[i] = new ArrayList();
    }
      
    for(int i = 0; i < e; i++)
    {
         
        int from = graph[i].from;
        int to = graph[i].to;
  
        tree[from].add(to);
        tree[to].add(from);
    }
     
    dfs(k, node, -1, tree);
}
 
// Driver Code
public static void main(String[] args)
{
     
    // Number of vertex and edges
    int v = 7, e = 6;
     
    // Given edges
    arr []graph = { new arr(2, 1),
                    new arr(2, 5),
                    new arr(5, 4),
                    new arr(5, 7),
                    new arr(4, 3),
                    new arr(7, 6) };
     
    // k is the required distance
    // upto which are neighbor
    // nodes should get printed
    int node = 4, k = 2;
     
    // Function calling
    print_under_dis_K(graph, node, k, v, e);
}
}
 
// This code is contributed by pratham76

Python3

# Python3 program to print
# the nearest K neighbour
# nodes (including itself)
 
tree = [[] for i in range(100)]
 
# Recursive function to print
# the neighbor nodes of a node
# until K distance
def dfs(k, node, parent):
 
    # Base condition
    if (k < 0):
        return
 
    # Print the node
    print(node, end = " ")
 
    # Traverse the connected
    # nodes/adjacency list
    for i in tree[node]:
 
        if (i != parent):
 
            # node i becomes the parent
            # of its child node
            dfs(k - 1, i, node)
 
# Function to print nodes under
# distance k
def print_under_dis_K(graph, node, k, v, e):
 
    for i in range(e):
 
        fro = graph[i][0]
        to = graph[i][1]
 
        tree[fro].append(to)
        tree[to].append(fro)
 
    dfs(k, node, -1)
 
# Driver Code
 
# Number of vertex and edges
v = 7
e = 6
 
# Given edges
graph = [[ 2, 1 ],
          [ 2, 5 ],
         [ 5, 4 ],
         [ 5, 7 ],
         [ 4, 3 ],
         [ 7, 6 ]]
  
# k is the required distance
# upto which are neighbor
# nodes should get pred
node = 4
k = 2
 
# function calling
print_under_dis_K(graph, node, k, v, e)
 
# This code is contributed by Mohit Kumar

C#

// C# program to print
// the nearest K neighbour
// nodes (including itself)
using System;
using System.Collections;
 
class GFG
{
     
// Structure of an edge
public class arr
{
    public int from, to;
     
    public arr(int from, int to)
    {
        this.from = from;
        this.to = to;
    }
};
 
// Recursive function to print
// the neighbor nodes of a node
// until K distance
static void dfs(int k, int node,
        int parent, ArrayList []tree)
{
 
    // Base condition
    if (k < 0)
        return;
 
    // Print the node
    Console.Write(node+" ");
     
    ArrayList tmp = (ArrayList)tree[node];
     
    // Traverse the connected
    // nodes/adjacency list
    foreach (int i in tmp)
    {
        if (i != parent)
        {
 
            // node i becomes the parent
            // of its child node
            dfs(k - 1, i, node, tree);
        }
    }
}
 
// Function to print nodes under
// distance k
static void print_under_dis_K(arr []graph,
                    int node, int k,
                    int v, int e)
{
 
    // To make graph with
    // the given edges
    ArrayList []tree = new ArrayList[v + 1];
     
    for(int i = 0; i < v + 1; i++)
    {
        tree[i] = new ArrayList();
    }
     
    for (int i = 0; i < e; i++)
    {
         
        int from = graph[i].from;
        int to = graph[i].to;
 
        tree[from].Add(to);
        tree[to].Add(from);
    }
 
    dfs(k, node, -1, tree);
}
  // Driver Code
  public static void Main(string[] args)
  {
     
    // Number of vertex and edges
    int v = 7, e = 6;
 
    // Given edges
    arr []graph = {
        new arr( 2, 1 ),
        new arr( 2, 5 ),
        new arr( 5, 4 ),
        new arr( 5, 7 ),
        new arr( 4, 3 ),
        new arr( 7, 6 )
    };
 
    // k is the required distance
    // upto which are neighbor
    // nodes should get printed
    int node = 4, k = 2;
 
    // function calling
    print_under_dis_K(graph, node, k, v, e);
  }
}
 
// This code is contributed by rutvik_56

Javascript

<script>
 
// JavaScript program to print
// the nearest K neighbour
// nodes (including itself)
 
// Structure of an edge
class arr
{
    constructor(from,to)
    {
        this.from = from;
        this.to = to;
    }
}
 
// Recursive function to print
// the neighbor nodes of a node
// until K distance
function dfs(k,node,parent,tree)
{
    // Base condition
    if (k < 0)
        return;
   
    // Print the node
    document.write(node + " ");
       
    let tmp = tree[node];
       
    // Traverse the connected
    // nodes/adjacency list
    for(let i=0;i<tmp.length;i++)
    {
        if (tmp[i] != parent)
        {
              
            // Node i becomes the parent
            // of its child node
            dfs(k - 1, tmp[i], node, tree);
        }
    }
}
 
// Function to print nodes under
// distance k
function print_under_dis_K(graph,node,k,v,e)
{
    // To make graph with
    // the given edges
    let tree = new Array(v + 1);
       
    for(let i = 0; i < v + 1; i++)
    {
        tree[i] = [];
    }
       
    for(let i = 0; i < e; i++)
    {
          
        let from = graph[i].from;
        let to = graph[i].to;
   
        tree[from].push(to);
        tree[to].push(from);
    }
      
    dfs(k, node, -1, tree);
}
 
// Driver Code
// Number of vertex and edges
    let v = 7, e = 6;
      
    // Given edges
    let graph = [ new arr(2, 1),
                    new arr(2, 5),
                    new arr(5, 4),
                    new arr(5, 7),
                    new arr(4, 3),
                    new arr(7, 6) ];
      
    // k is the required distance
    // upto which are neighbor
    // nodes should get printed
    let node = 4, k = 2;
      
    // Function calling
    print_under_dis_K(graph, node, k, v, e);
 
 
// This code is contributed by unknown2108
 
</script>
Producción: 

4 5 2 7 3

 

Publicación traducida automáticamente

Artículo escrito por md1844 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *