java实现dijkstra_JAVA实现DIJKSTRA算法

importjava.util.Queue;importjava.util.LinkedList;public classdijkstra{public static voidmain(String args[]){

System.out.println("dijkstra algo");

/*construct the adjacent table begin*/

Node n0= new Node(0);

Node n1= new Node(1);

Node n2= new Node(2);

Node n3= new Node(3);

Node n4= new Node(4);

Node n5= new Node(5);

AdjNode n0n1= new AdjNode(7,n1);

AdjNode n0n2= new AdjNode(9,n2);

AdjNode n0n5= new AdjNode(14,n5);

AdjNode n1n0= new AdjNode(7,n0);

AdjNode n1n2= new AdjNode(10,n2);

AdjNode n1n3= new AdjNode(15,n3);

AdjNode n2n0= new AdjNode(9,n0);

AdjNode n2n5= new AdjNode(2,n5);

AdjNode n2n3= new AdjNode(11,n3);

AdjNode n3n1= new AdjNode(15,n1);

AdjNode n3n2= new AdjNode(11,n2);

AdjNode n3n4= new AdjNode(6,n4);

AdjNode n4n3= new AdjNode(6,n3);

AdjNode n4n5= new AdjNode(9,n5);

AdjNode n5n4= new AdjNode(9,n4);

AdjNode n5n2= new AdjNode(2,n2);

AdjNode n5n0= new AdjNode(14,n0);

AdjNode[] n0adj={n0n1,n0n2,n0n5};

AdjNode[] n1adj={n1n0,n1n2,n1n3};

AdjNode[] n2adj={n2n0,n2n5,n2n3};

AdjNode[] n3adj={n3n1,n3n2,n3n4};

AdjNode[] n4adj={n4n3,n4n5};

AdjNode[] n5adj={n5n4,n5n2,n5n0};

n0.addAdjNodes(n0adj);

n1.addAdjNodes(n1adj);

n2.addAdjNodes(n2adj);

n3.addAdjNodes(n3adj);

n4.addAdjNodes(n4adj);

n5.addAdjNodes(n5adj);

/*construct the adjacent table end*/

Node[] G={n0,n1,n2,n3,n4,n5};

Queue queue = new LinkedList();

AdjNode[] currAdjNodes;

n0.color= 1;

n0.vt++;

n0.setShortestPathLen(0);

queue.offer(n0);

Node currNode=queue.poll();while(currNode != null){

currAdjNodes=currNode.getAllAdjNodes();for(int i=0;i (currNode.getShortestPathLen()+currAdjNodes[i].weight)){

currAdjNodes[i].adjNode.setShortestPathLen(currNode.getShortestPathLen()+currAdjNodes[i].weight);

currAdjNodes[i].adjNode.setPreNode(currNode);

}if(currAdjNodes[i].adjNode.color == 0){

currAdjNodes[i].adjNode.color= 1;

currAdjNodes[i].adjNode.vt++;

queue.offer(currAdjNodes[i].adjNode);

}

}

currNode.color= 2;

currNode=queue.poll();

}for(int i=0;i

System.out.println("shortest path of " + i + "node:" + G[i].getShortestPathLen()+" vt:"+G[i].vt);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值