Saturday, April 26, 2014

BFS using shortest path between 2 nodes in adjacent matrix








import java.util.ArrayList;








public class BfsData







{







// Graph adjacency matrix (unweighted graph)







static private int[][] graph = { {0,3,0,0,2}, // 0->1 0->3







{0,0,0,33,0}, // 1->2, 1->3







{0,0,0,22,0}, // 2->4







{0,0,0,0,3}, // 3->2, 3->4







{0,0,0,0,0} // 4->1







};








//--------------------------------------------------------------







public static void main (String[] args)







{







ArrayList<Integer> Start = new ArrayList();







Start.add(0); // The start node







ArrayList<ArrayList> Queue = new ArrayList();







Queue.add(Start); // inserted in the initial queue of paths as [[Start]]







// Use one search at a time (comment the others)







// ArrayList Path = depth_first(Queue,4); // Depth first search







ArrayList Path = breadth_first(Queue,4); // Breadth first search







// ArrayList Path = uni_cost(Queue,4); // Uniform cost search







System.out.println(Path);







// System.out.println(path_cost(Path));







}







//--------------------------------------------------------------







// Adds to the queue paths extending the first path in the queue







public static ArrayList<ArrayList> extend (ArrayList<Integer> Path)







{







ArrayList<ArrayList> NewPaths = new ArrayList();







for (int i=0;i<graph.length;i++)







if (graph[Path.get(0)][i]>0 && !Path.contains(i))







{







ArrayList Path1 = (ArrayList)Path.clone();








System.out.println(Path1+"=====jjjj====");







Path1.add(0,i);







NewPaths.add(Path1);







System.out.println(NewPaths+"====NewPaths==");







}







return NewPaths;







}







//--------------------------------------------------------------







// Appends y to x and returns the result in a new ArrayList z







public static ArrayList append (ArrayList x, ArrayList y)







{







ArrayList z = (ArrayList)x.clone();







for (int i=0;i<y.size();i++) z.add(y.get(i));







return z;







}








//--------------------------------------------------------------







// Breadth first search for a path from Start to Goal.







// The Start node must be in the initial queue of paths as [[Start]]







public static ArrayList<ArrayList> breadth_first(ArrayList<ArrayList> Queue, int Goal)







{







if (Queue.size()==0) return Queue; // path not found







if ((Integer)Queue.get(0).get(0) == Goal) // if Goal is the first node in the first path







return Queue.get(0); // return path







else // replace the first path with all its extensions and put them at the end of the queue







{







ArrayList<ArrayList> NewPaths = extend(Queue.get(0));







Queue.remove(0);







return breadth_first(append(Queue,NewPaths),Goal);







}







}







//--------------------------------------------------------------







public static int path_cost (ArrayList<Integer> Path)







{







int cost = 0;







for (int i=0;i<Path.size()-1;i++)







cost = cost + graph[Path.get(i+1)][Path.get(i)];







return cost;







}







public static void sort(ArrayList<ArrayList> Queue)







{







int out, in;







for(out=Queue.size()-1; out>=1; out--)







for(in=0; in<out; in++)







if( path_cost(Queue.get(in)) > path_cost(Queue.get(in+1)) )







swap(Queue, in, in+1);







}







//--------------------------------------------------------------







private static void swap(ArrayList<ArrayList> a, int one, int two)







{







ArrayList<Integer> temp = a.get(one);







a.set(one,a.get(two));







a.set(two,temp);







}








}








As Above program, in that place i will directly send the adjacent matrix file through file reader, that file is








a b c d e f g h i j k l m n o p q r s t u v w x y z aa ab ac ad







a 0 3 0 0 2 1 0 0 0 2 0 0 42 1 0 0 11 0 6 0 0 0 0 43 0 36 0 23 0 24







b 0 0 0 33 0 25 0 36 0 0 0 3 24 0 2 0 0 47 0 0 8 3 0 17 0 0 0 0 4 20







c 0 0 0 22 0 12 16 0 34 0 0 7 0 2 0 0 0 0 0 16 0 13 0 0 0 25 0 0 0 10







d 0 0 0 0 3 4 0 0 0 0 5 12 8 0 0 0 2 12 0 0 3 0 0 24 32 0 0 0 0 0







e 0 0 0 0 0 0 1 4 0 12 0 20 0 0 0 0 13 0 1 16 0 0 0 0 2 4 5 6 0 0







f 0 0 0 0 0 0 1 0 2 0 13 8 0 0 1 0 4 0 0 8 0 0 0 12 1 0 0 0 1 0







g 0 0 0 0 0 0 0 1 12 0 3 5 0 2 0 3 0 0 1 2 0 0 0 5 10 0 1 2 1 0







h 0 0 0 0 0 0 0 0 3 34 5 0 0 0 0 0 1 12 1 0 0 0 0 0 2 0 3 0 1 0







i 0 0 0 0 0 0 0 0 0 1 2 0 0 42 0 1 5 34 1 0 0 1 0 0 0 0 0 1 0 0







j 0 0 0 0 0 0 0 0 0 0 0 1 22 0 11 0 25 41 0 0 0 0 0 0 0 1 0 1 0 4







k 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 23 0 12 0 2 0 3 0 1 0 0 1 1







l 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 19 12 0 0 1 0 0 0 0 2 0 4 0 2 0







m 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 5 1 0 0 0 0 3 0 2 0 0 0 0 0 0







n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 23 0 5 32 0 50 0 1 0 3 4







o 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 4 0 0 2 53 0 2 21 3 0 0 0 1







p 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 2 24 0 0 12 38 0 2 0 0







q 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 24 0 0 24 0 0 12 0 5 0 0 0







r 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 12 0 57 0 0 2 0







s 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 24 0 1 0 5 12 0







t 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4 0 24 1 6 0 0 1







u 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 1 0 0







v 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 22 1 1 4 0







w 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 22 38 0 0 5 7 0







x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 5 0 1







y 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 21 0 1







z 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1







aa 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 42 0 0







ab 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0







ac 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5







ad 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0








"" static private int[][] graph = { {0,3,0,0,2}, // 0->1 0->3







{0,0,0,33,0}, // 1->2, 1->3







{0,0,0,22,0}, // 2->4







{0,0,0,0,3}, // 3->2, 3->4







{0,0,0,0,0} // 4->1







};"" ....in that ""---"" i will set that above matrix file ?how to set that file??















No comments:

Post a Comment