您的位置:首页 > 编程语言 > Java开发

基于邻接矩阵实现图的深度和广度遍历(JAVA实现)

2017-06-03 11:09 791 查看


基于邻接矩阵实现图的深度和广度遍历(JAVA实现)

package matrix;

import java.util.LinkedList;
import java.util.Queue;

/**
*
* @author linziyu
*基于邻接矩阵实现的深度和广度遍历
*/
public class Graph {
final static int INF = 100000;
final int max = 100;
int[] vexs = new int[max]; //存放顶点的数组
int[][] edges = new int[max][max]; //存放边的数组

/*
* 创建邻接矩阵
*/
public void createGraph(Graph graph ,int[][] A,int[] vs) {
vexs = vs;
for(int i=0;i<A.length;i++) {
for(int j=0;j<A.length;j++) {
graph.edges[i][j] = A[i][j];
}
}

}

/*
* 输出邻接矩阵
*/
public void print_Graph(Graph graph) {
for(int i=0;i<graph.vexs.length;i++) {
for(int j=0;j<graph.vexs.length;j++) {
if (graph.edges[i][j] == INF) {
System.out.printf("%4s", "/");
}else {
System.out.printf("%4d",graph.edges[i][j]);
}
}
System.out.println("\n");
}
}

/**
* 找出给定顶点的第一个邻接顶点
* @param graph
* @param v
* @return
*/
public int getFirst(Graph graph, int v) {
for(int i=0;i<graph.vexs.length;i++) {
if (graph.edges[v][i]==1) {
return i;
}
}
return -1;
}

/**
* 找出给定顶点v的第k个邻接顶点的邻接顶点
* @param graph
* @param v
* @param k
* @return
*/
public int getNext(Graph graph ,int v,int k) {
for(int i=k+1;i<graph.vexs.length;i++) {
if (graph.edges[v][i] == 1) {
return i;
}
}
return -1;
}

/*
* 深度遍历
*/
public void DFS(Graph graph ,int v,int[] visited) {
int next;
System.out.println(v);
visited[v] =1;
next=graph.getFirst(graph, v);
while (next!=-1) {
if (visited[next]==0) {
graph.DFS(graph, next,visited);
}
next=graph.getNext(graph, v, next);
}
}
/*
* 广度遍历
*/
public void BFS(Graph graph,int v,int[] visited) {
Queue<Integer> queue = new LinkedList<>();
int next;
queue.add(v);
visited[v]=1;
while (!queue.isEmpty()) {
next=queue.remove();
System.out.println(next);
int vex = graph.getFirst(graph, next);
while (vex!=-1) {
if (visited[vex]==0) {
queue.add(vex);
visited[vex]=1;
}
vex=graph.getNext(graph, next, vex);
}
}

}

public static void main(String[] args) {
int[] vs  = {0,1,2,3,4};
int[][] A = {
{INF,1,INF,1,INF},
{1,INF,1,INF,INF},
{INF,1,INF,1,1},
{1,INF,1,INF,1},
{INF,INF,1,1,INF}
};

Graph graph = new Graph();
graph.createGraph(graph, A, vs);
graph.print_Graph(graph);
int[] visited = new int[100];
int[] visited1 = new int[100];
graph.DFS(graph, 0,visited);
System.out.println("-----------");
graph.BFS(graph, 0, visited1);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐