用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;
}
@Override
public int compareTo(Point o) {
if(this.weight<o.weight){
return -1;
}else{
if(this.weight==o.weight){
return 0;
}
else{
return 1;
}
}
}
@Override
public String toString() {
return weight + "]";
}
}
}