public class Graph {
private ArrayList<String> vertexList;
private int [][] edges;
private int numOfEdges;//边的个数
boolean isVisited[];
public static void main(String[] args) {
int n=5;
String[] VertexValue ={"A","B","C","D","E"};
Graph graph=new Graph(n);
for (String val : VertexValue) {
graph.insertVertex(val);
}
graph.insertEdges(0,1,1);
graph.insertEdges(0,2,1);
graph.insertEdges(1,2,1);
graph.insertEdges(1,3,1);
graph.insertEdges(1,4,1);
graph.showGraph();
System.out.println();
graph.dfs();
}
public Graph(int n){
vertexList=new ArrayList<>(n);
edges=new int[n][n];
isVisited=new boolean[n];
}
public int getFirstNeighbor(int index){
for (int j=0;j<vertexList.size();j++){
if (edges[index][j]>0){
return j;
}
}
return -1;
}
public int getNextNeighbor(int v1,int v2){
for (int j=v2+1;j<vertexList.size();j++){
if (edges[v1][j]>0){
return j;
}
}
return -1;
}
public void dfs(boolean[] isVisited,int i){
System.out.print(vertexList.get(i)+"->");
isVisited[i]=true;
int w = getFirstNeighbor(i);
while (w!=-1){
if (!isVisited[w]){
dfs(isVisited,w);
}
//如果w已经被访问了
w=getNextNeighbor(i,w);
}
}
public void dfs(){
for (int i = 0; i < vertexList.size(); i++) {
if (!isVisited[i]){
dfs(isVisited,i);
}
}
}
//添加结点
public void insertVertex(String insertVal){
vertexList.add(insertVal);
}
//添加边
public void insertEdges(int v1,int v2,int weight){
edges[v1][v2]=weight;
edges[v2][v1]=weight;
numOfEdges++;
}
//获取边的个数
public int getNumOfEdges(){
return numOfEdges;
}
//获取节点的个数
public int getNumOfVertex(){
return vertexList.size();
}
//根据索引获得值
public String getValueByIndex(int i){
return vertexList.get(i);
}
public int getWeight(int v1,int v2){
return edges[v1][v2];
}
public void showGraph(){
for (int[] edge : edges) {
System.out.println(Arrays.toString(edge));
}
}
}
11-14
1143
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交