📄 dijpanel.java
字号:
{
// adjust values in shortest-path array sPath
int column = 0; // skip starting vertex
while(column < nVerts) // go across columns
{
// if this column's vertex already in tree, skip it
if( vertexList[column].isInTree )
{
column++;
continue;
}
// calculate distance for one sPath entry
// get edge from currentVert to column
int currentToFringe = adjMat[currentVert][column];
// add distance from start
int startToFringe = startToCurrent + currentToFringe;
// get distance of current sPath entry
int sPathDist = sPath[column].distance;
// compare distance from start with sPath entry
if(startToFringe < sPathDist) // if shorter,
{ // update sPath
sPath[column].parentVert = currentVert;
sPath[column].distance = startToFringe;
}
column++;
} // end while(column < nVerts)
} // end adjust_sPath()
// -------------------------------------------------------------
//displayPaths(); // display sPath[] contents
public void cleartree(){
nTree = 0; // clear tree
for(int j=0; j<nVerts; j++)
vertexList[j].isInTree = false;
} // end path()
// -------------------------------------------------------------
public int getMin() // get entry from sPath
{ // with minimum distance
int minDist = INFINITY; // assume minimum
int indexMin = 0;
for(int j=1; j<nVerts; j++) // for each vertex,
{ // if it's in tree and
if( !vertexList[j].isInTree && // smaller than old one
sPath[j].distance < minDist )
{
minDist = sPath[j].distance;
indexMin = j; // update minimum
}
} // end for
return indexMin; // return index of minimum
} // end getMin()
/////////////////////////////////////////////////////////////
public void add()
{
vertexList = new Vertex[MAX_VERTS];
nVerts = 0;
nTree = 0;
adjMat = new int[MAX_VERTS][MAX_VERTS];
sPath = new DistPar[MAX_VERTS]; // shortest paths
/*
addVertex('0'); // 0 (start)
addVertex('1'); // 1
addVertex('2'); // 2
addVertex('3'); // 3
addVertex('4'); // 4
*/
for (int i = 0; i < Integer.parseInt(jTextField1.getText()); i++) {
char ch = String.valueOf(i).charAt(0);
addVertex(ch);
}
for (int i = 0; i < MAX_VERTS; i++) {
for (int j = 0; j < MAX_VERTS; j++) {
adjMat[i][j] = tempAdjMat[i][j];
}
}
/* addEdge(0, 1, 5); // AB 5
addEdge(0, 3, 8); // AD 8
addEdge(1, 2, 6); // BC 6
addEdge(1, 3, 9); // BD 9
addEdge(2, 4, 4); // CE 4
addEdge(3, 2, 2); // DC 2
addEdge(3, 4, 7); // DE 7
addEdge(4, 1, 15); // EB 5*/
}
public void jTextField4_actionPerformed(ActionEvent e) {
int start = Integer.parseInt(jTextField2.getText());
int end = Integer.parseInt(jTextField3.getText());
int weight= Integer.parseInt(jTextField4.getText());
jTextArea4.append(String.valueOf(start)+"-->"+String.valueOf(end)+": "+String.valueOf(weight)+"\t");
addEdge(start,end,weight);
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
}
public void jButton1_actionPerformed(ActionEvent e) {
for (int i = 0; i < Integer.parseInt(jTextField1.getText()); i++) {
char ch = String.valueOf(i).charAt(0);
System.out.println(ch);
addVertex(ch);
}
/*addEdge(0, 1, 5); // AB 5
addEdge(0, 3, 8); // AD 8
addEdge(1, 2, 6); // BC 6
addEdge(1, 3, 9); // BD 9
addEdge(2, 4, 4); // CE 4
addEdge(3, 2, 2); // DC 2
addEdge(3, 4, 7); // DE 7
addEdge(4, 1, 15); // EB 5*/
jTextArea3.setText("");
int t = Integer.valueOf(jTextField1.getText());
for (int i = 0; i < t; i++) {
for (int j = 0; j < t; j++) {
tempAdjMat[i][j] = adjMat[i][j];
jTextArea3.append(String.valueOf(adjMat[i][j])+"\t");
}
jTextArea3.append("\n");
}
}
public void jTextField5_actionPerformed(ActionEvent e) {
}
public void jButton2_actionPerformed(ActionEvent e) {
int node = Integer.parseInt(jTextField5.getText());
jTextArea1.setText("");
jTextArea1.append("目的\t下一站\t时间\n");
add();
path(node);
//--------------------------------------------------------------
for (int j = 0; j < nVerts; j++) { // display contents of sPath[]
jTextArea1.append(String.valueOf(vertexList[j].label) + "\t");
char parent = vertexList[sPath[j].parentVert].label;
jTextArea1.append(String.valueOf(parent) + "\t");
if (sPath[j].distance == INFINITY)
jTextArea1.append("inf\t\n");
else
jTextArea1.append(String.valueOf(sPath[j].distance) + "\n");
}
}
public void jButton3_actionPerformed(ActionEvent e) {
char send = jTextField6.getText().charAt(0);
jTextArea2.setText("");
char temp = 'q';
for (int i = 0; i < nVerts; i++) {
if(sPath[i].distance == INFINITY){
temp = vertexList[i].label;
}
}
jTextArea2.append(String.valueOf(send) + "<---");
for (int i = 0; i <nVerts; i++) {
if((vertexList[i].label) == send)
{
send = vertexList[ sPath[i].parentVert].label;
jTextArea2.append(send + "<---");
i = 0;
if(send == temp)
{//jTextArea1.append(String.valueOf(temp));
break;}
}
}
cleartree();
}
}
class DijPanel_jButton3_actionAdapter implements ActionListener {
private DijPanel adaptee;
DijPanel_jButton3_actionAdapter(DijPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton3_actionPerformed(e);
}
}
class DijPanel_jButton2_actionAdapter implements ActionListener {
private DijPanel adaptee;
DijPanel_jButton2_actionAdapter(DijPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}
class DijPanel_jTextField5_actionAdapter implements ActionListener {
private DijPanel adaptee;
DijPanel_jTextField5_actionAdapter(DijPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jTextField5_actionPerformed(e);
}
}
class DijPanel_jButton1_actionAdapter implements ActionListener {
private DijPanel adaptee;
DijPanel_jButton1_actionAdapter(DijPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}
class DijPanel_jTextField4_actionAdapter implements ActionListener {
private DijPanel adaptee;
DijPanel_jTextField4_actionAdapter(DijPanel adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jTextField4_actionPerformed(e);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -