我正在研究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 所以这就是它如何进行呼吸第一次搜索。在进入下一个级别之前遍历关卡上的所有元素。我希望它会清除..