Print all neighbour nodes within distance K - GeeksforGeeks

15 Nov, 2021
Given a graph of N nodes, E edges, a node X and a distance K. The task is to print all the nodes within the distance K from X.
Input:  
Output: 4 5 2 7 3Neighbour nodes within distance 2 of node 4 are: 4 5 2 7 3  
Approach: To print all the nodes that are at distance K or less than K. We can do it by applying dfs variation, that takes K node from where we have to print the distance until distance K. 
dfs(K, node, -1, tree)
Here -1 indicates node parent. This recursive function basically prints the node and then calls the dfs(K-1, neighbour of node, node, tree). Base condition is K>0.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ program to print// the nearest K neighbour// nodes (including itself)#include <bits/stdc++.h>using namespace std; // Structure of an edgestruct arr {    int from, to;}; // Recursive function to print// the neighbor nodes of a node// until K distancevoid 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 kvoid 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 Codeint 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 program to print// the nearest K neighbour// nodes (including itself)import java.util.*; @SuppressWarnings("unchecked")class GFG{      // Structure of an edgepublic 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 distancestatic 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 kstatic 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 Codepublic 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 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 distancedef 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 kdef 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 edgesv = 7e = 6 # Given edgesgraph = [[ 2, 1 ],          [ 2, 5 ],         [ 5, 4 ],         [ 5, 7 ],         [ 4, 3 ],         [ 7, 6 ]]  # k is the required distance# upto which are neighbor# nodes should get prednode = 4k = 2 # function callingprint_under_dis_K(graph, node, k, v, e) # This code is contributed by Mohit Kumar
// C# program to print// the nearest K neighbour// nodes (including itself)using System;using System.Collections; class GFG{     // Structure of an edgepublic 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 distancestatic 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 kstatic 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
<script> // JavaScript program to print// the nearest K neighbour// nodes (including itself) // Structure of an edgeclass arr{    constructor(from,to)    {        this.from = from;        this.to = to;    }} // Recursive function to print// the neighbor nodes of a node// until K distancefunction 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 kfunction 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>
4 5 2 7 3
 
mohit kumar 29
Akanksha_Rai
rutvik_56
pratham76
unknown2108
clintra
Amazon
DFS
Samsung
Trees
Graph
Amazon
Samsung
DFS
Graph
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Best First Search (Informed Search)
Longest Path in a Directed Acyclic Graph
Graph Coloring | Set 2 (Greedy Algorithm)
Find if there is a path between two vertices in a directed graph
Vertex Cover Problem | Set 1 (Introduction and Approximate Algorithm)
Snake and Ladder Problem
Check if a given graph is tree or not
Tree, Back, Edge and Cross Edges in DFS of Graph
Iterative Deepening Search(IDS) or Iterative Deepening Depth First Search(IDDFS)
Real-time application of Data Structures