📄 fsofgragh.java~29~
字号:
if(!autoGenerated){ graph=new Graph(count+1); Edge temp=new Edge(); for(int i=0;i<vector.size();i++){ temp=(Edge)vector.elementAt(i); graph.addEdge(temp.head,temp.tail,temp.weight); } } DFS(graph); } else if(lab.equals("清除")){ resetAll(); } else if(lab.equals("关于")){ about.setVisible(true); } else if(lab.equals("如何使用")){ help.setVisible(true); } else if(lab.equals("退出")){ System.exit(0); } if (e.getSource()==btn4){ // 单步执行程序 Graphics g =getGraphics(); ColorNode tempColorNode=(ColorNode)colorVector.elementAt(num); int tempseq,tempc,nodeid; tempseq=tempColorNode.seq; tempc=tempColorNode.c; nodeid=searchId(tempseq); if (tempc==2) {//变为灰色 g.setColor(Color.gray); node[nodeid].fill(g); } else if (tempc==3) {//变为黑色 g.setColor(Color.black); node[nodeid].fill(g); } /*nodeid=searchId(seq); if (c==2) {//变为灰色 g.setColor(Color.gray); node[nodeid].fill(g); } else if (c==3) {//变为黑色 g.setColor(Color.black); node[nodeid].fill(g); }*/ num++; } } private void printResult(Edge[] result,int scale){ Graphics ge = getGraphics(); Clock clock=new Clock(); int start,end; int i=0; info.setText(""); info.append("Processing...\n"); while(i<scale){ start=searchId(result[i].head); end=searchId(result[i].tail); ge.setColor(Color.red); node[start].fill(ge); node[end].fill(ge); ge.drawLine(node[start].x+15,node[start].y+15,node[end].x+15,node[end].y+15); info.append("Edge "+result[i].head+"->"+result[i].tail+" weight "+result[i].weight+"\n"); ge.setColor(Color.black); i++; clock.pause(0.7); } info.append("Done!"); } private void resetAll(){ for(int i=0;i<400;i++){ node[i].setVisible(false); node[i].setSequence(Integer.MAX_VALUE); } count=-1; drawNode=false; drawEdge=false; vector.removeAllElements(); info.setText(""); Graphics g=image.getGraphics(); g.clearRect(0,0,800,630); num=0; repaint(); } /* private Graph createRandomGraph(){ //Random Graph creating with Max Node count 3 to 10 and Edges count 1 to n*(n-1)/2 and Weights between 0 and 20 int node_count=0; int edge_count=0; double x; while(node_count<3||node_count>10){ x=Math.random(); node_count=(int)Math.floor(x*100)+1; } info.append("Num_Nodes: "+node_count+"\n"); while(edge_count<1||edge_count>node_count*(node_count-1)/2){ x=Math.random(); edge_count=(int)Math.floor(x*100)+1; } info.append("Num_Edges: "+edge_count+"\n"); int count=0; int index_x; int index_y; int edgeWeight; Graph graph=new Graph(node_count); while(count<edge_count){ index_x=randomNumGenenration(node_count-1); index_y=randomNumGenenration(node_count-1); edgeWeight=randomNumGenenration(20); // if(index_x!=index_y&&!graph.haveEdge(index_x,index_y)){ // graph.addEdge(index_x,index_y,edgeWeight); // count++; // } } switch(node_count){ case 3: node[49].setVisible(true); node[263].setVisible(true); node[275].setVisible(true); node[49].setSequence(0); node[263].setSequence(1); node[275].setSequence(2); break; case 4: node[63].setVisible(true); node[75].setVisible(true); node[283].setVisible(true); node[295].setVisible(true); node[63].setSequence(0); node[75].setSequence(1); node[283].setSequence(2); node[295].setSequence(3); break; case 5: node[49].setVisible(true); node[143].setVisible(true); node[156].setVisible(true); node[306].setVisible(true); node[313].setVisible(true); node[49].setSequence(0); node[143].setSequence(1); node[156].setSequence(2); node[306].setSequence(3); node[313].setSequence(4); break; case 6: node[49].setVisible(true); node[83].setVisible(true); node[96].setVisible(true); node[303].setVisible(true); node[316].setVisible(true); node[350].setVisible(true); node[49].setSequence(0); node[83].setSequence(1); node[96].setSequence(2); node[303].setSequence(3); node[316].setSequence(4); node[350].setSequence(5); break; case 7: node[49].setVisible(true); node[83].setVisible(true); node[96].setVisible(true); node[303].setVisible(true); node[316].setVisible(true); node[350].setVisible(true); node[189].setVisible(true); node[49].setSequence(0); node[83].setSequence(1); node[96].setSequence(2); node[303].setSequence(3); node[316].setSequence(4); node[350].setSequence(5); node[189].setSequence(6); break; case 8: node[66].setVisible(true); node[73].setVisible(true); node[142].setVisible(true); node[157].setVisible(true); node[262].setVisible(true); node[277].setVisible(true); node[326].setVisible(true); node[333].setVisible(true); node[66].setSequence(0); node[73].setSequence(1); node[142].setSequence(2); node[157].setSequence(3); node[262].setSequence(4); node[277].setSequence(5); node[326].setSequence(6); node[333].setSequence(7); break; case 9: node[66].setVisible(true); node[73].setVisible(true); node[142].setVisible(true); node[157].setVisible(true); node[262].setVisible(true); node[277].setVisible(true); node[326].setVisible(true); node[333].setVisible(true); node[210].setVisible(true); node[66].setSequence(0); node[73].setSequence(1); node[142].setSequence(2); node[157].setSequence(3); node[262].setSequence(4); node[277].setSequence(5); node[326].setSequence(6); node[333].setSequence(7); node[210].setSequence(8); break; case 10: node[11].setVisible(true); node[25].setVisible(true); node[82].setVisible(true); node[180].setVisible(true); node[303].setVisible(true); node[369].setVisible(true); node[335].setVisible(true); node[238].setVisible(true); node[158].setVisible(true); node[56].setVisible(true); node[11].setSequence(0); node[25].setSequence(1); node[82].setSequence(2); node[180].setSequence(3); node[303].setSequence(4); node[369].setSequence(5); node[335].setSequence(6); node[238].setSequence(7); node[158].setSequence(8); node[56].setSequence(9); break; } return graph; }*/ private int randomNumGenenration(int merge){ int temp=-1; double x; while(temp<0||temp>merge){ x=Math.random(); temp=(int)Math.floor(x*100); } return temp; } private void depictGraph(Graph graph){ Graphics g=image.getGraphics(); for(int i=0;i<400;i++){ if(node[i].isVisible()){ node[i].draw(g); info.append("Node "+node[i].getSequence()+" at "+i+"\n"); } } int start,end; // for(int u=0;u<graph.numVertices;u++) // for(int v=u+1;v<graph.numVertices;v++) // if(graph.matrix[u][v]!=Integer.MAX_VALUE){ // start=searchId(u); // end=searchId(v); // if(start!=9999||end!=9999){ // g.drawLine(node[start].x+15,node[start].y+15,node[end].x+15,node[end].y+15); // g.drawString(""+graph.matrix[u][v],(node[start].x+node[end].x)/2,(node[start].y+node[end].y)/2); // info.append("Edge "+node[start].getSequence()+"->"+node[end].getSequence()+" Wt "+graph.matrix[u][v]+"\n"); // } // } } private int searchId(int x){ int index=0; while(index<400){ if(node[index].getSequence()==x){ return node[index].getId(); } index++; } return 9999; } private class Node { private int x,y; private int id; private boolean visible; private int seq; public Node(int i,int x,int y) { this.x=x; this.y=y; id=i; visible=false; seq=Integer.MAX_VALUE; } public void draw(Graphics g){ g.setColor(Color.blue); g.drawOval(x,y,30,30); g.drawString(""+seq,x+6,y+18); } public void fill(Graphics g){ g.fillOval(x,y,30,30); //g.setColor(Color.blue); g.drawString(""+seq,x+6,y+18); } public boolean check(int x,int y){ if((x<this.x+30)&&(y<this.y+30)&&(x>=this.x)&&(y>=this.y)){ return true; } else{ return false; } } public boolean isVisible(){ return visible; } public void setVisible(boolean b){ visible=b; } public int getSequence(){ return seq; } public void setSequence(int n){ seq=n; } public int getId(){ return id; } } private class MouseKeeper extends MouseAdapter implements MouseMotionListener{ private int startx,starty; private int lastx,lasty; private boolean firstClicked=true; public void MouseKeeper(){ } public void mousePressed(MouseEvent e){ } private void drawShape(Graphics g){ } public void mouseDragged(MouseEvent e){ } public void mouseReleased(MouseEvent e){ c_id=choose(e.getX(),e.getY()); if(drawNode&&c_id>=0&&c_id<=399&&!node[c_id].isVisible()){ count++; } repaint(); } public void mouseMoved(MouseEvent e){ } public void mouseClicked(java.awt.event.MouseEvent e) { if(drawNode){ c_id=choose(e.getX(),e.getY()); if(c_id>=0&&c_id<=399&&!node[c_id].isVisible()){ node[c_id].setVisible(true); node[c_id].setSequence(count); Graphics g=image.getGraphics(); node[c_id].draw(g); info.append("Node "+count+" at "+c_id+"\n"); } } else if(drawEdge){ c_id=choose(e.getX(),e.getY()); if(firstClicked&&node[c_id].isVisible()){ startx=node[c_id].x+15; starty=node[c_id].y+15; firstClicked=false; } else if(!firstClicked&&node[c_id].isVisible()&&(choose(startx,starty)!=c_id)){ lastx=node[c_id].x+15; lasty=node[c_id].y+15; Graphics g=image.getGraphics(); g.drawLine(startx,starty,lastx,lasty); // int weight=getEdgeWeight(); // g.drawString(""+weight,(startx+lastx)/2,(starty+lasty)/2); // info.append("Edge "+node[choose(startx,starty)].getSequence()+"->"+node[choose(lastx,lasty)].getSequence()+" Wt "+weight+"\n"); firstClicked=true; repaint(); Edge temp=new Edge(); temp.head=node[choose(startx,starty)].getSequence(); temp.tail=node[choose(lastx,lasty)].getSequence(); // temp.weight=weight; vector.addElement(temp); } } } /* private int getEdgeWeight(){ int temp=input.getInteger("Please Input Edgeweight:"); return temp; }*/ } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -