package com.example.data_structure.service; import com.example.data_structure.domain.UDUWGraph; import com.example.data_structure.domain.UDWGraph; import com.example.data_structure.vo.GraphTraversalStep; import com.example.data_structure.vo.GraphTraversalVO; import com.example.data_structure.vo.PrimMinimumSpanningTree; import org.springframework.stereotype.Service; import java.util.*; @Service public class GraphService { private static final int NODE_NUM=7; //获取一个新的无向非带权图 public UDUWGraph getNewUDUDGraph(){ ArrayList> content=new ArrayList>(); for(int i=0;i raw=new ArrayList(); for(int j=0;j> content=new ArrayList>(); for(int i=0;i raw=new ArrayList(); for(int j=0;j> content=graph.getContent(); ArrayList visitSequence =new ArrayList(); ArrayList visited=new ArrayList(); ArrayList visitStartNode=new ArrayList(); for(int i=0;i steps=new ArrayList(); for(int i=0;i q=new LinkedList(); q.add(startVertex); while(!q.isEmpty()){ int curVertex=q.poll(); steps.add(new GraphTraversalStep("visit",visitStartNode.get(curVertex),curVertex,true)); visited.set(curVertex,1); visitSequence.add(curVertex); for(int i=0;i> content=graph.getContent(); GraphTraversalVO graphTraversalVO =new GraphTraversalVO(); graphTraversalVO.setGraph(graph); ArrayList steps=new ArrayList(); GraphTraversalStep currentStep=new GraphTraversalStep(); ArrayList visitSequence=new ArrayList(); ArrayList visited=new ArrayList(); ArrayList visitStartNode=new ArrayList(); for(int i=0;i stack=new Stack(); stack.push(startVertex); visited.set(startVertex,1); visitSequence.add(startVertex); steps.add(new GraphTraversalStep("visit",startVertex,startVertex,true)); boolean isTerminal=false; int formerNode=0; while(!stack.isEmpty()){ int curVertex=stack.peek(); int nextNode=0; if(visitSequence.get(visitSequence.size()-1)==curVertex) { //如果正在遍历某支路,没有折返 isTerminal=true; for (int i = 0; i < nodeNum; i++) { if (content.get(curVertex).get(i) == 1) { if (visited.get(i) == 0) { steps.add(new GraphTraversalStep("tryRoad",curVertex,i,true)); nextNode = i; steps.add(new GraphTraversalStep("visit",curVertex,i,true)); visited.set(nextNode, 1); visitSequence.add(nextNode); stack.push(nextNode); isTerminal = false; break; }else{ steps.add(new GraphTraversalStep("tryRoad",curVertex,i,false)); } } } if(isTerminal){ formerNode=stack.pop(); steps.add(new GraphTraversalStep("return",curVertex,stack.peek(),true)); } }else{ //如果在折返状态中 if(formerNode> content=graph.getContent(); int nodeNum=content.size(); ArrayList cost=new ArrayList(); ArrayList known=new ArrayList(); ArrayList startNode=new ArrayList(); ArrayList> treeEdges=new ArrayList>(); ArrayList knownSequence=new ArrayList(); ArrayList steps=new ArrayList(); PrimMinimumSpanningTree primMinimumSpanningTree=new PrimMinimumSpanningTree(); for(int i=0;i0){ //如果有边可以到达的话 steps.add(new GraphTraversalStep("tryRoad",indexOfMin,i,true)); if(content.get(indexOfMin).get(i) edge=new ArrayList(); edge.add(startNode.get(i)); edge.add(i); treeEdges.add(edge); } } primMinimumSpanningTree.setSteps(steps); primMinimumSpanningTree.setTreeEdges(treeEdges); return primMinimumSpanningTree; } }