import java import javax.swing import com from java.util import Random from com.hp.hpl.guess import Guess i = 0 alpha = 4; class searchapplet(com.hp.hpl.guess.ui.DockableAdapter): label = javax.swing.JLabel("click to search for a path between two random nodes") #label2 = javax.swing.JLabel("") testButton = javax.swing.JButton("find path") iteration = 0 tele = 0.05 nosink = 1 sum = 0 nar = g.nodes.__len__() def __init__(self): Guess.setMTF(true) Guess.setSynchronous(true) v.setDisplayBackground(white) self.testButton.actionPerformed = self.buttonPressed # add the label and slider to the UI self.add(self.label) # self.add(self.label2) self.add(self.testButton) g.nodes.color=orange g.nodes.size = 30 g.edges.width=10 g.edges.color=gray #addNodeField("newscore",Types.DOUBLE,0) # dock the new panel into the UI ui.dock(self) v.center() def buttonPressed(self,event): self.findpath() def getTitle(self): return("searchapplet") def findpath(self): rng = Random() g.nodes.color=orange g.edges.width=10 g.edges.color=gray i1 = 0 i2 = 0 g.nodes.size=30 while (i1 == i2): i1 = rng.nextInt( self.nar ) i2 = rng.nextInt( self.nar ) n1 = (g.nodes)[i1] n2 = (g.nodes)[i2] n1.color=green n2.color=red n1.size = n1.size*4 n2.size = n2.size*2 current = n1 for nod in g.nodes: nod.visited = 0 numsteps = 0 self.label revisits = 0 nextone = current while (current != n2): numsteps += 1 if (current.visited != 0): revisits += 1 current.visited = 1 # print numsteps," ",current minimum =10000000 for ed in current.getOutEdges(): if (ed.node1 == current): othernode = ed.node2 else : othernode = ed.node1 dist = ((n2.x-othernode.x)**2+(n2.y-othernode.y)**2)**0.5 if ((dist < minimum)&(othernode.visited == 0)): minimum = dist nextone = othernode edgeused = ed if (nextone == current): numneighbors = current.getOutEdges().__len__() tmp = rng.nextInt(numneighbors) ed = (current.getOutEdges())[tmp] if (ed.node1 == current): nextone = ed.node2 else : nextone = ed.node1 #print "random choice ",current," from edge ",ed edgeused = ed current = nextone current.color=skyblue current.size = current.size*2 edgeused.color=blue edgeused.width=35 if (numsteps > 100): self.label.setText(" Giving up after 100 steps.") break if (numsteps < 100): self.label.setText(" Search completed in "+str(numsteps)+" steps.") # self.label2.setText(" "+str(revisits)+" revisits were made.") n2.color = red