⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ssp.java

📁 This code implements the shortest path algorithm via the simple scheme and fibonacci heap data struc
💻 JAVA
字号:

import java.io.*;
import java.util.StringTokenizer;

public class ssp {
	// main function
	public static void main(String[] args) {	
		if (args[0].compareTo("-r")==0)  
		{   // Random Mode
			System.out.println("Number of nodes   "+"	 "+"Density"+"   "+"Simple scheme"+"   "+"F-heap scheme"); 
			for (int n=100; n<=500; n=n+100)
			{   // from 100 to 500 nodes
				for(int i=10;i<100;i=i+10)
				{ //density from 10 to 100
					StringBuffer temp=new StringBuffer();
					temp.append("         "+n+"                ");
					temp.append(i);
					temp.append("           ");

					RandomGraph randG = new RandomGraph(n, i/100);			
					AdjGraph G=new AdjGraph();
					G=randG.GraphGenerator(n,i/100);
							
					SimpleSSP tester = new SimpleSSP(G,n);
					FibonacciSSP tester2 = new FibonacciSSP(G,n);
					
					long []startSiSSP=new long[5];
					long []stopSiSSP=new long[5];
					long []timeSiSSP=new long[5];
					long []startFiSSP=new long[5];
					long []stopFiSSP=new long[5];
					long []timeFiSSP=new long[5];
					
					int j=0;
					do{
						//simple schema
						startSiSSP[j] = System.currentTimeMillis();
						for (int v=0; v<100; v++)
						{
							tester.ShortestPath(G.getSource());
						}
						//tester.ShortestPath(G.getSource());
						stopSiSSP[j] = System.currentTimeMillis();
						timeSiSSP[j] = stopSiSSP[j] - startSiSSP[j]; 
				
			            //fibonacci heap schema
						startFiSSP[j] = System.currentTimeMillis();
						for (int v=0; v<100; v++)
						{
							tester2.FShortestPath(G.getSource());
						}
						//tester2.FShortestPath(G.getSource());
						stopFiSSP[j]  = System.currentTimeMillis();
						timeFiSSP[j] = stopFiSSP[j] - startFiSSP[j];
						j++;
					}while(j<5);
					// run five times and get the average
					
					long sum1=0,sum2=0;
					for(j=0;j<5;j++)
					{
						sum1=sum1+timeSiSSP[j];
						sum2=sum2+timeFiSSP[j];
					}
					long time1,time2;
					time1=sum1/5;
					time2=sum2/5;
					//compute the average
				
					temp.append(time1+"               ");
			        temp.append(time2+"               ");
			 	    System.out.println(temp.toString());		    
					}
				}
			}	
		if(args.length==1)
		{
			if(args[0].compareTo("-is")==0)
			{// userinput simple schema
				AdjGraph graph= new AdjGraph(1000);
				System.out.println("Input: Starnode Endnode Weight");
				int linecounter=-1;
				//read from user's input
				
				try{
				InputStreamReader input = new InputStreamReader(System.in);
				BufferedReader in = new BufferedReader(input);
                String line = in.readLine();
                int readin[]=new int[3];
                
				while(line.compareTo("*")!=0){
					 linecounter++;
					 int i=0;
					 StringTokenizer T = new StringTokenizer(line);
				     while (T.hasMoreTokens()){
				    	 readin[i]=Integer.valueOf(T.nextToken()).intValue();
				         i++;
				     }
				     if (i<2) graph.setSource(readin[0]);
				     else graph.addNode(readin[0], readin[1], readin[2]);
				     line = in.readLine();
				}
				}
				catch(FileNotFoundException e)
				{
					System.out.println("Data file was not found");
					System.out.println("or could not be opened.");
				}
				catch(IOException e)
				{
					System.out.println("Error reading from file.");
				}
				
				//compute the shortest path
				AdjGraph G=graph;
				int n= linecounter;
				int s = G.getSource();
				int[] distance=new int[n];
				SimpleSSP tester = new SimpleSSP(G,n);
				distance=tester.ShortestPath(s);
				System.out.println("Node"+" Dist");
				for(int i=0;i<n;i++)
					if(distance[i]!=5000)
					System.out.println(i+"     "+distance[i]);
			}
				
			if(args[0].compareTo("-if")==0)
			{//user input fibonacci schema
				AdjGraph graph= new AdjGraph(1000);
				System.out.println("Input: Starnode Endnode Weight");
				int linecounter=-1;
				
				//read from usr input
				try{
				InputStreamReader input = new InputStreamReader(System.in);
				BufferedReader in = new BufferedReader(input);
                String line = in.readLine();
                int readin[]=new int[3];
                
				while(line.compareTo("*")!=0){
					 linecounter++;
					 int i=0;
					 StringTokenizer T = new StringTokenizer(line);
				     while (T.hasMoreTokens()){
				    	 readin[i]=Integer.valueOf(T.nextToken()).intValue();
				         i++;
				     }
				     if (i<2) graph.setSource(readin[0]);
				     else graph.addNode(readin[0], readin[1], readin[2]);
				     line = in.readLine();
				}
				}
				catch(FileNotFoundException e)
				{
					System.out.println("Data file was not found");
					System.out.println("or could not be opened.");
				}
				catch(IOException e)
				{
					System.out.println("Error reading from file.");
				}
				
				//compute the shortest path
				AdjGraph G=graph;
				int n= linecounter;
				int s = G.getSource();
				int[] distance=new int[n];
				FibonacciSSP tester = new FibonacciSSP(G,n);
				distance=tester.FShortestPath(s);
				System.out.println("Node"+" Dist");
				for(int i=0;i<n;i++)
					if(distance[i]!=5000)
					System.out.println(i+"     "+distance[i]);
			}
				
		}
		else
		{// if args.length ==2
			if(args[0].compareTo("-is")==0)
			{ // user file input simple schema
				
				//read from file
				ReadFile reader= new ReadFile(args[1]);			
				AdjGraph G=reader.getGraph();	
				int n= 6;
				int s = G.getSource();
				int[] distance=new int[n];
				
				//simple schema
				SimpleSSP tester = new SimpleSSP(G,n);
				distance=tester.ShortestPath(s);
				System.out.println("Node"+" Dist");
				for(int i=0;i<n;i++)
					if(distance[i]!=5000)
					System.out.println(i+"     "+distance[i]);
			}
				
			if(args[0].compareTo("-if")==0)
			{//user file input fibonacci schema
				
				//read from file
				ReadFile reader = new ReadFile(args[1]);					
				AdjGraph G=reader.getGraph();	
				int n= reader.linect;
				int s = G.getSource();
				int[] distance=new int[n];
				
				//comput shortest path
				FibonacciSSP tester2 = new FibonacciSSP(G,n);
				distance=tester2.FShortestPath(s);
				System.out.println("Node"+" Dist");
				for(int i=0;i<n;i++)
					if(distance[i]!=5000)
					System.out.println(i+"     "+distance[i]);
			}
				
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -