📄 graph.java
字号:
package fy;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.StringTokenizer;
import java.util.Vector;
public class Graph {
private HashMap<String ,Path> LinkID2Path;
private HashMap<String ,Path> PathName2Path;
private HashMap<String ,LandMark> LandMarkName2LandMark;
private HashMap<String ,Node> NodeID2Node;
private HashMap<String,Node> Pair2Node;
private String filename;
private String picName;
private Vector<Path> paths;
private Vector<LandMark> landmarks;
public Graph(String filename){
this.filename=filename;
this.picName="";
this.LandMarkName2LandMark=new HashMap<String, LandMark>();
this.LinkID2Path=new HashMap<String, Path>();
this.PathName2Path=new HashMap<String, Path>();
this.NodeID2Node=new HashMap<String, Node>();
this.readFile();
this.initPair2Node();
}
private void initPair2Node() {
Pair2Node=new HashMap<String,Node>();
for (Enumeration<Path> e = paths.elements(); e.hasMoreElements();) {
Path thispath=e.nextElement();
for(Enumeration<Node> eb = thispath.nodes.elements(); eb.hasMoreElements();){
Node now =eb.nextElement();
now.addPath(thispath.name);
if(now.getPathNum()==2){
Pair pair = new Pair(now.pathIDsWithThisNode.get(0),now.pathIDsWithThisNode.get(1));
Pair2Node.put(pair.getString1(), now);
Pair2Node.put(pair.getString2(), now);
}
}
}
}
private void readFile() {
BufferedReader buffer = null;
try {
buffer = new BufferedReader(new FileReader(filename));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String s;
StringTokenizer st;
try {
while((s=buffer.readLine())!=null){
st = new StringTokenizer(s);
//锟斤拷始锟斤拷paths
if(s.startsWith("#pic")){
picName=s.intern();
}
if(s.startsWith("#allPathNum")){
st.nextToken();
int pathNum=Integer.parseInt(st.nextToken());
paths = new Vector<Path>(pathNum);
int countPath=0;
while(countPath<pathNum){
countPath++;
s=buffer.readLine();
st = new StringTokenizer(s);
st.nextToken();
String pathname=st.nextToken();
Path thispath = new Path(pathname);//要锟斤拷拥锟絧ath
int linkNum = Integer.parseInt(st.nextToken());
Vector<Link> links = new Vector<Link>(linkNum);
int linkCount=0;
while(linkCount<linkNum){
linkCount++;
s=buffer.readLine();
st = new StringTokenizer(s);
st.nextToken();st.nextToken();st.nextToken();st.nextToken();
Node left = new Node();
Node right = new Node();
thispath.addNode(left);
thispath.addNode(right);
NodeID2Node.put(left.getNodeId(), left);
NodeID2Node.put(right.getNodeId(), right);
Link link = new Link(left,right,Float.parseFloat(st.nextToken()));
LinkID2Path.put(link.getLinkId(), thispath);
links.add(link);
}
thispath.setLinks(links);
paths.add(thispath);
PathName2Path.put(pathname, thispath);
}
}
//锟斤拷始锟斤拷landmarks
if(s.startsWith("#allLandMarkNum")){
st.nextToken();
int landmarkNum = Integer.parseInt(st.nextToken());
landmarks = new Vector<LandMark>(landmarkNum);
int landmarkCount = 0;
while(landmarkCount<landmarkNum){
landmarkCount++;
s=buffer.readLine();
st = new StringTokenizer(s);
st.nextToken();
LandMark landmark = new LandMark(
st.nextToken(),
NodeID2Node.get(st.nextToken()),NodeID2Node.get(st.nextToken()),
Float.parseFloat(st.nextToken()),Float.parseFloat(st.nextToken())
);
landmarks.add(landmark);
LandMarkName2LandMark.put(landmark.getName(), landmark);
}
}
}
buffer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private int[][] shortestLengthes(){
return null;
}
//private int[][]
public class Pair{
Path path1;
Path path2;
Pair(Path path3,Path path4){
path1=path3;
path2=path4;
}
Pair(String id1,String id2){
path1=PathName2Path.get(id1);
path2=PathName2Path.get(id2);
}
public String getString1(){
return path1.name+"2"+path2.name;
}
public String getString2(){
return path2.name+"2"+path1.name;
}
}
public void search(String firstStringNode, String secondStringNode, int firstsearchMode, int secondsearchMode) {
switch(firstsearchMode){
case test.L:
switch(secondsearchMode){
case test.L:
searchL2L(firstStringNode,secondStringNode);
break;
case test.RR:
searchL2RR(firstStringNode,secondStringNode);
break;
}
break;
case test.RR:
switch(secondsearchMode){
case test.L:
searchRR2L(firstStringNode,secondStringNode);
break;
case test.RR:
searchRR2RR(firstStringNode,secondStringNode);
break;
}
break;
}
}
private void searchRR2RR(String firstStringNode, String secondStringNode) {
Node begin = Pair2Node.get(firstStringNode);
Node end = Pair2Node.get(secondStringNode);
Result res = basicSearch(begin,end);
System.out.print("from :"+firstStringNode+"\t to :"+secondStringNode+"\n");
System.out.print(">>>>>the shortest path is "+res.path);
System.out.print(">>>>>the shortest length is "+res.len);
}
private void searchRR2L(String firstStringNode, String secondStringNode) {
Node begin = Pair2Node.get(firstStringNode);
LandMark end = LandMarkName2LandMark.get(secondStringNode);
Result tmp1=basicSearch(begin,end.left);
Result tmp2=basicSearch(begin,end.left);
}
private void searchL2RR(String firstStringNode, String secondStringNode) {
}
private void searchL2L(String firstStringNode, String secondStringNode) {
}
private Result basicSearch(Node begin, Node left) {
return null;
}
class Result{
String path;
float len;
Result(float length,String pathforthis){
path=pathforthis;
len=length;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -