图的邻接矩阵存储下的广度优先遍历:就像树的按层次遍历,需要借助队列实现。
图的邻接矩阵存储下的广度优先遍历的实现代码如下:
/***
*
* 邻接矩阵广度优先遍历
*
*/
public void breadthFirstTravel()
{
System.out.println("邻接矩阵的广度优先遍历:");
//初始化队列,LinkedList实现了Queue接口
Queue<Integer> queue=new LinkedList<Integer>();
//初始化各顶点的访问状态
int []visited=new int[mapping.length];
//从未访问顶点中任选一个顶点作为起始顶点
int unvisited=getUnvisited(visited);
while(unvisited>=0)
{
//起始顶点入队
queue.add(unvisited);
while(!queue.isEmpty())
{
//出队顶点并访问
int index=queue.poll();
if(visited[index]==1)
{
continue;
}
System.out.print(mapping[index]+" ");
//标记被访问
visited[index]=1;
//遍历所有未被访问的邻接顶点,放入队列中
for(int i=0;i<mapping.length;i++)
{
//不是自己、未被访问、可到达
if(index!=i&&visited[i]==0&&matrix[index][i]>0)
{
queue.add(i);
}
}
}
//寻找下一个未被访问的节点
unvisited=getUnvisited(visited);
}
System.out.println();
}
/**
* 0
* / \
* 1 2
* / \ / \
* 3 4 5 6
* \ | | /
* 7
*/