1.IGraph接口
/**
* 图的接口
* @author Administrator
*/
public interface IGraph<E> {
/**
* 获取顶点的个数
* @return
*/
int getNumOfVertex();
/**
* 插入顶点
* @param v
* @return
*/
boolean insertVex(E v);
/**
* 删除顶点
* @param v
* @return
*/
boolean deleteVex(E v);
/**
* 定位顶点的位置
* @param v
* @return
*/
int indexOfVex(E v);
/**
* 定位指定位置的顶点
* @param v
* @return
*/
E valueOfVex(int v);
/**
* 插入边 无向无权图
* @param v1
* @param v2
* @param weight
* @return
*/
boolean insertEdge(int v1, int v2,int weight);
/**
* 插入边 考虑什么类型
* 1:无向无权图
* 2:无向有权图
* 3:有向无权图
* 4:有向有权图
* @return
*/
boolean insertEdge(EdgeElement edgeElement);
/**
* 删除边
* @param v1
* @param v2
* @return
*/
boolean deleteEdge(int v1, int v2);
/**
* 查找边
* @param v1
* @param v2
* @return
*/
int getEdge(int v1,int v2);
/**
* 深度优先搜索遍历(递归栈实现)
* @param v
* @return
*/
String depthFirstSearchByDG(int v );
/**
* 深度优先搜索遍历(非递归实现)
* @param v
* @return
*/
String depthFirstSearch(int v );
/**
* 广度优先搜索遍历
* @param v
* @return
*/
String breadFirstSearch(int v );
/**
* 查找源点到其它顶点的路径
* @param v
* @return
*/
int[] dijkstra(int v);
/**
* 打印二维数组边的权值
*/
void out();
}
2.邻接矩阵实现(GraphAdjMatrix)
import java.lang.reflect.Array;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
/**
* 稠密图
* 邻接矩阵实现
* @author Administrator
*/
public class GraphAdjMatrix<E> implements IGraph<E> {
/**
* 存储图的顶点的一维数组
*/
public E[] vexs;
/**
* 存储图的边的二维数组
*/
private int[][] edges;
/**
* 顶点的实际数量
*/
private int numOfVexs;
/**
* 顶点的最大数量
*/
private int maxNumOfVexs;
/**
* 判断顶点是否被访问过
*/
private boolean[] visited;
/**
*
* @param maxNumOfVexs
* @param type
*/
@SuppressWarnings("unchecked")
public GraphAdjMatrix(int maxNumOfVexs, Class<E> type) {
this.maxNumOfVexs = maxNumOfVexs;
edges = new int[maxNumOfVexs][maxNumOfVexs];
vexs = (E[]) Array.newInstance(type, maxNumOfVexs);
}
/**
* 获取顶点的个数
*
* @return
*/
@Override
public int getNumOfVertex() {
return numOfVexs;
}
/**
* 插入顶点
*
* @param v
* @return
*/
@Override
public boolean insertVex(E v) {
//当顶点数小于最大顶点数
if (numOfVexs<maxNumOfVexs){
vexs[numOfVexs++] = v;
return true;
}
return false;
}
/**
* 删除顶点
*
* @param v
* @return
*/
@Override
public boolean deleteVex(E v) {
for (int i =