package dtests; import cute.dcute.Actor; import cute.dcute.Message; import cute.dcute.DScheduler; import cute.Cute; import java.util.Vector; import java.util.Iterator; /** * . * User: ksen * Date: Oct 11, 2005 * Time: 11:34:48 PM * To change this template use File | Settings | File Templates. */ class SpMsg extends Message { public SPProcess sender; public int d; public int w; public SpMsg(SPProcess sender, int d, int w) { this.sender = sender; this.d = d; this.w = w; } } class SPProcess extends Actor { public int D = -1; public SPProcess N = null; private Vector neigbors = new Vector(); private Vector neigborsD = new Vector(); public void addNeighbor(SPProcess n,int d){ neigbors.add(n); neigborsD.add(new Integer(d)); } /* to start a.send(a,new SpMsg(null,0,0)); */ public void receive(Message m) { SpMsg msg = (SpMsg)m; if(D==-1 || D > msg.d + msg.w){ D = msg.d + msg.w; N = msg.sender; Iterator iter2 = neigborsD.iterator(); for (Iterator iterator = neigbors.iterator(); iterator.hasNext();) { SPProcess spProcess = (SPProcess) iterator.next(); int w = ((Integer)iter2.next()).intValue(); send(spProcess,new SpMsg(this,D,w)); } } } } public class ShortestPath { public static void main(String[] args) { SPProcess a0 = new SPProcess(); SPProcess a1 = new SPProcess(); SPProcess a2 = new SPProcess(); SPProcess a3 = new SPProcess(); SPProcess a4 = new SPProcess(); if(Cute.N==4){ a0.addNeighbor(a1,10); a1.addNeighbor(a0,10); a0.addNeighbor(a2,10); a2.addNeighbor(a0,10); a0.addNeighbor(a3,10); a3.addNeighbor(a0,10); a1.addNeighbor(a3,10); a3.addNeighbor(a1,10); a2.addNeighbor(a3,10); a3.addNeighbor(a2,10); a0.send(a0,new SpMsg(null,0,0)); } else { a0.addNeighbor(a1,10); a1.addNeighbor(a0,10); a0.addNeighbor(a2,10); a2.addNeighbor(a0,10); a1.addNeighbor(a3,10); a3.addNeighbor(a1,10); // a2.addNeighbor(a3,10); // a3.addNeighbor(a2,10); a4.addNeighbor(a1,10); a4.addNeighbor(a0,10); a1.addNeighbor(a4,10); a0.addNeighbor(a4,10); a4.send(a4,new SpMsg(null,0,0)); } DScheduler.sched.start(); } }