这个打印图形的代码是如何工作的?



我正在研究Geeksforgeeks的BFS,实际上我对循环"for(Integer pCrawl: graph.adjListArray[v]("感到困惑。谁能解释这部分?

static void printGraph(Graph graph) 
{        
for(int v = 0; v < graph.V; v++) 
{ 
System.out.println("Adjacency list of vertex "+ v); 
System.out.print("head"); 
for(Integer pCrawl: graph.adjListArray[v]){ 
System.out.print(" -> "+pCrawl); 
} 
System.out.println("n"); 
} 
}

以下是图形的代码

class Graph 
{ 
private int V;   // No. of vertices 
private LinkedList<Integer> adj[]; //Adjacency Lists 
// Constructor 
Graph(int v) 
{ 
V = v; 
adj = new LinkedList[v]; 
for (int i=0; i<v; ++i) 
adj[i] = new LinkedList(); 
} 
// Function to add an edge into the graph 
void addEdge(int v,int w) 
{ 
adj[v].add(w); 
}

第二个循环只是遍历graph.adjListArray[v]中的所有元素

int[] array = {1, 2, 3};
for (int n: array) {
System.out.println(n);
}

指纹:

1
2
3

我猜你正在使用下面的例子:

static class Graph 
{ 
int V; 
LinkedList<Integer> adjListArray[]; 
// constructor  
Graph(int V) 
{ 
this.V = V; 
// define the size of array as  
// number of vertices 
adjListArray = new LinkedList[V]; 
// Create a new list for each vertex 
// such that adjacent nodes can be stored 
for(int i = 0; i < V ; i++){ 
adjListArray[i] = new LinkedList<>(); 
} 
} 
} 

因此,第二次迭代是通过单个级别的节点进行迭代(v - 级别的索引(。

for(Integer pCrawl: graph.adjListArray[v]){ 
System.out.print(" -> "+pCrawl); 
} 

表示图的所有顶点。 第一个循环将迭代它们,内部循环将打印每个顶点相邻元素..意味着它将从根开始,因为根将没有相邻元素,因此它将从根移动到下一个元素的下一个元素,然后打印其相邻的...这将继续.. 呼吸第一搜索是:

我们首先遍历一整级别的子节点,然后再遍历孙节点。在继续遍历曾孙节点之前,我们遍历整个级别的孙节点。

所以让我们假设我们的树是:

1
/   
2    3
/   /
4 5  6 7

此算法的工作方式如下: 第一个顶点是 1,它将打印 1。但是 1 没有相邻元素,因此它将移动到下一个顶点 2 并打印其相邻的 3 现在输出将是 1 ,2,3 .我们的下一个顶点将是 4,它将打印其相邻的 5,6,7 所以这就是它如何进行呼吸第一次搜索。在进入下一个级别之前遍历关卡上的所有元素。我希望它会清除..

最新更新