# 图论算法：图的广度优先搜索或BFS解析和代码实现

2021年3月9日16:16:39 发表评论 431 次浏览

)。

## C ++

``````// Program to print BFS traversal from a given
// source vertex. BFS(int s) traverses vertices
// reachable from s.
#include<iostream>
#include <list>

using namespace std;

// This class represents a directed graph using
class Graph
{
int V;    // No. of vertices

// Pointer to an array containing adjacency
// lists
public :
Graph( int V);  // Constructor

// function to add an edge to graph
void addEdge( int v, int w);

// prints BFS traversal from a given source s
void BFS( int s);
};

Graph::Graph( int V)
{
this ->V = V;
adj = new list< int >[V];
}

void Graph::addEdge( int v, int w)
{
}

void Graph::BFS( int s)
{
// Mark all the vertices as not visited
bool *visited = new bool [V];
for ( int i = 0; i < V; i++)
visited[i] = false ;

// Create a queue for BFS
list< int > queue;

// Mark the current node as visited and enqueue it
visited展开 = true ;
queue.push_back(s);

// 'i' will be used to get all adjacent
// vertices of a vertex
list< int >::iterator i;

while (!queue.empty())
{
// Dequeue a vertex from queue and print it
s = queue.front();
cout << s << " " ;
queue.pop_front();

// Get all adjacent vertices of the dequeued
// vertex s. If a adjacent has not been visited, // then mark it visited and enqueue it
{
if (!visited[*i])
{
visited[*i] = true ;
queue.push_back(*i);
}
}
}
}

// Driver program to test methods of graph class
int main()
{
// Create a graph given in the above diagram
Graph g(4);

cout << "Following is Breadth First Traversal "
<< "(starting from vertex 2) \n" ;
g.BFS(2);

return 0;
}``````

## Java

``````// Java program to print BFS traversal from a given source vertex.
// BFS(int s) traverses vertices reachable from s.
import java.io.*;
import java.util.*;

// This class represents a directed graph using adjacency list
// representation
class Graph
{
private int V;   // No. of vertices

// Constructor
Graph( int v)
{
V = v;
for ( int i= 0 ; i<v; ++i)
}

// Function to add an edge into the graph
void addEdge( int v, int w)
{
}

// prints BFS traversal from a given source s
void BFS( int s)
{
// Mark all the vertices as not visited(By default
// set as false)
boolean visited[] = new boolean [V];

// Create a queue for BFS

// Mark the current node as visited and enqueue it
visited展开= true ;

while (queue.size() != 0 )
{
// Dequeue a vertex from queue and print it
s = queue.poll();
System.out.print(s+ " " );

// Get all adjacent vertices of the dequeued vertex s
// If a adjacent has not been visited, then mark it
// visited and enqueue it
while (i.hasNext())
{
int n = i.next();
if (!visited[n])
{
visited[n] = true ;
}
}
}
}

// Driver method to
public static void main(String args[])
{
Graph g = new Graph( 4 );

System.out.println( "Following is Breadth First Traversal " +
"(starting from vertex 2)" );

g.BFS( 2 );
}
}
// This code is contributed by Aakash Hasija``````

## Python3

``````# Python3 Program to print BFS traversal
# from a given source vertex. BFS(int s)
# traverses vertices reachable from s.
from collections import defaultdict

# This class represents a directed graph
class Graph:

# Constructor
def __init__( self ):

# default dictionary to store graph
self .graph = defaultdict( list )

# function to add an edge to graph
def addEdge( self , u, v):
self .graph[u].append(v)

# Function to print a BFS of graph
def BFS( self , s):

# Mark all the vertices as not visited
visited = [ False ] * ( len ( self .graph))

# Create a queue for BFS
queue = []

# Mark the source node as
# visited and enqueue it
queue.append(s)
visited展开 = True

while queue:

# Dequeue a vertex from
# queue and print it
s = queue.pop( 0 )
print (s, end = " " )

# Get all adjacent vertices of the
# dequeued vertex s. If a adjacent
# has not been visited, then mark it
# visited and enqueue it
for i in self .graph展开:
if visited[i] = = False :
queue.append(i)
visited[i] = True

# Driver code

# Create a graph given in
# the above diagram
g = Graph()

print ( "Following is Breadth First Traversal"
" (starting from vertex 2)" )
g.BFS( 2 )

# This code is contributed by Neelam Yadav``````

## C#

``````// C# program to print BFS traversal
// from a given source vertex.
// BFS(int s) traverses vertices
// reachable from s.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// This class represents a directed
// representation
class Graph{

// No. of vertices
private int _V;

public Graph( int V)
{
for ( int i = 0; i < _adj.Length; i++)
{
}
_V = V;
}

// Function to add an edge into the graph
public void AddEdge( int v, int w)
{

}

// Prints BFS traversal from a given source s
public void BFS( int s)
{

// Mark all the vertices as not
// visited(By default set as false)
bool [] visited = new bool [_V];
for ( int i = 0; i < _V; i++)
visited[i] = false ;

// Create a queue for BFS

// Mark the current node as
// visited and enqueue it
visited展开 = true ;

while (queue.Any())
{

// Dequeue a vertex from queue
// and print it
s = queue.First();
Console.Write(s + " " );
queue.RemoveFirst();

// Get all adjacent vertices of the
// dequeued vertex s. If a adjacent
// has not been visited, then mark it
// visited and enqueue it

foreach ( var val in list)
{
if (!visited[val])
{
visited[val] = true ;
}
}
}
}

// Driver code
static void Main( string [] args)
{
Graph g = new Graph(4);

Console.Write( "Following is Breadth First " +
"Traversal(starting from " +
"vertex 2)\n" );
g.BFS(2);
}
}

// This code is contibuted by anv89``````

``````Following is Breadth First Traversal (starting from vertex 2)
2 0 3 1``````

• 关于BFS的最新文章
• 深度优先遍历
• 广度优先遍历的应用
• 深度优先搜索的应用

• A+