zoj 1221

来源:互联网 发布:php 拍卖 源码 手机 编辑:程序博客网 时间:2024/05/26 09:55

用dijkstra算法

没有测试是否满足所有的,但是给出的都对上了。

import java.lang.reflect.Array;import java.util.ArrayList;import java.util.Queue;import java.util.Scanner;import java.util.concurrent.PriorityBlockingQueue;public class Main {int w[][];//放的是权重public static void main(String args[]){Main main=new Main();main.start();}Scanner scan=new Scanner(System.in);Graph graph;public void start(){int v=20;w=new int[v][v];graph=new Graph(v);//放的是点for(int i=0;i<v-1;i++){int a=scan.nextInt();for(int j=0;j<a;j++){int b=scan.nextInt()-1;graph.addPoint(i,b );w[i][b]=1;w[b][i]=1;}}int number=scan.nextInt();while(number>0){startRun(scan.nextInt()-1,scan.nextInt()-1);number--;}}int flag=0;public void startRun(int s,int e){boolean marked[]=new boolean[graph.vSize];Point point[]=new Point[graph.vSize];Queue<Point> pq=new PriorityBlockingQueue<Point>();int a=100000000;for(int i=0;i<graph.vSize;i++){if(i==s){point[i]=new Point(0,i);pq.offer(point[i]);}else{point[i]=new Point(a,i);pq.offer(point[i]);}}while(!pq.isEmpty()){Point p=pq.poll();int v=p.v;//System.out.println(p+" "+p.v);for(int i:graph.array[v]){if(point[i].weight>point[v].weight+w[v][i]){point[i].weight=point[v].weight+w[v][i];//System.out.println(point[v].weight+" "+w[v][i]);}}pq.offer(new Point(-1,-1));pq.poll();}if(flag==0){System.out.println("Test Set #1 ");flag=1;}System.out.println(s+" "+"to"+" "+e+":"+point[e].weight);}class Graph{int vSize;ArrayList<Integer> array[];public Graph(int v){this.vSize=v;array=(ArrayList<Integer>[])new ArrayList[v];for(int i=0;i<array.length;i++){array[i]=new ArrayList<Integer>();}}public void addPoint(int i,int a){array[i].add(a);array[a].add(i);}}class Point implements Comparable<Point>{int weight;int v;public Point(int weight,int v) {super();this.v=v;this.weight = weight;}@Overridepublic int compareTo(Point o) {if(this.weight<o.weight){return -1;}else{if(this.weight==o.weight){return 0;}else{return 1;}}}@Overridepublic String toString() {return  weight + "]";}}}


0 0
原创粉丝点击