import java.util.LinkedList;
//邻接矩阵表示图 广度优先搜索
public class BFS {
public static void main(String [] args)
{
int n = 5;
int [][] matrix =
{
{0, 1, 1, 0,0},
{1, 0, 0, 0,1},
{1, 0, 0, 1,0},
{0, 0, 1, 0,0},
{0, 1, 0, 0,0},
};
boolean [] visited = new boolean [n];
for (int i = 0; i < n ; i ++)
visited [i] = false;
BFS bfs = new BFS();
for (int i = 0; i < n; i ++)
{
if (!visited [i])//如果没有被访问
{
bfs.BfsTrack(matrix, visited, n, i);
}
}
}
private void BfsTrack(int [][] matrix, boolean [] visited, int n, int i)
{
LinkedList<Integer> queue = new LinkedList<Integer>();
queue.add(i);
visited[i] = true;
System.out.print(" " + (i+1) + " ");
while(queue.size()!=0)//队列中还有数据
{
int k = queue.pollFirst();//取出队首数据
for (int j = 0; j < n; j ++)
{
if (matrix[k][j] != 0 && !visited[j])//访问与当前节点相邻的节点
{
queue.add(j);//把相邻节点入队
visited[j] = true;//标记为已访问节点
System.out.print(" " + (j+1) + " ");
}
}
}
//System.out.println("");
}
}