Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package grafy;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.util.*;
- class Kr{
- W w;
- int i;
- Kr(){
- }
- }
- class CustomComparator implements Comparator<W> {
- @Override
- public int compare(W o1, W o2) {
- return o1.getWaga(o1) - o2.getWaga(o2);
- // return o1.getWaga(o1).compareTo(o2.getWaga(o2));
- }
- }
- class W{
- private int MAX = 1000;
- private List<Kr> laczenia=new ArrayList<Kr>();
- // private List<Integer> laczeniaW = new ArrayList<Integer>();
- private int number, odleglosc, waga=0;
- private String color;
- private W poprzednik;
- W(){
- }
- void addConnection(Kr kr){
- laczenia.add(kr);
- }
- void delDuplicates(W w){
- for(int i=0;i<w.laczenia.size();++i){
- for(int j=i+1;j<w.laczenia.size();){
- if(w.laczenia.get(j).equals(w.laczenia.get(i)))w.laczenia.remove(j);
- else ++j;
- }
- }
- }
- int getOdleglosc(W w){
- return w.odleglosc;
- }
- W getPoprzednik(W w){
- return w.poprzednik;
- }
- int getWaga(W w){
- return w.waga;
- }
- int getNumber(W w){
- return w.number;
- }
- boolean isWhite(W w){
- return (w.color.equalsIgnoreCase("bialy"))?true:false;
- }
- void printConnections(List<W> graf){
- for(W x: graf){
- System.out.print(x.number+": ");
- for(Kr kr: x.laczenia){
- System.out.print("("+kr.w.getNumber(kr.w)+","+kr.i+") ");
- }
- System.out.println();
- }
- }
- void setNumber(int i){
- number = i;
- }
- void setWhite(W w){
- w.color = "bialy";
- }
- void setBlack(W w){
- w.color = "czarny";
- }
- void setGray(W w){
- w.color = "szary";
- }
- void setPoprzednik(W w){
- poprzednik = w;
- }
- void setOdleglosc(W w, int i){
- w.odleglosc=i;
- }
- void setWaga(W w, int i){
- w.waga=i;
- }
- void zwiekszOdleglosc(W w){
- ++w.odleglosc;
- }
- void BFS(List<W> graf, int s){
- List<W> list = new ArrayList<W>();
- for(int i=0;i<graf.size();++i){
- graf.get(i).setWhite(graf.get(i));
- graf.get(i).setPoprzednik(null);
- graf.get(i).setOdleglosc(graf.get(i), -1);
- }
- graf.get(s).setGray(graf.get(s));
- graf.get(s).setOdleglosc(graf.get(s),0);
- graf.get(s).setPoprzednik(null);
- list.add(graf.get(s));
- while(!list.isEmpty()){
- W u = list.get(0);
- list.remove(0);
- for(Kr v: u.laczenia)
- {
- if(v.w.isWhite(v.w)){
- v.w.setGray(v.w);
- v.w.setOdleglosc(v.w, u.getOdleglosc(u)+1);
- v.w.setPoprzednik(u);
- list.add(v.w);
- }
- }
- u.setBlack(graf.get(u.number));
- }
- }
- void Dijkstra(List<W> graf, int s){
- List<W> list = new ArrayList<W>();
- for(int i=0;i<graf.size();++i){
- graf.get(i).setWhite(graf.get(i));
- graf.get(i).setPoprzednik(null);
- graf.get(i).setWaga(graf.get(i), MAX);
- }
- graf.get(s).setWaga(graf.get(s), 0);
- graf.get(s).setPoprzednik(null);
- list.add(graf.get(s));
- while(!list.isEmpty()){
- Collections.sort(list, new CustomComparator());
- int i=0;
- while(list.get(i).color.compareTo("czarny")==0){
- list.remove(i);
- }
- graf.get(s).setBlack(graf.get(s));
- W u = list.get(i);// do edycji, musi brac element o najmniejszej wadze}
- list.remove(i);
- for(Kr kr: u.laczenia){
- if(kr.w.isWhite(kr.w)){
- if(kr.i+u.waga<kr.w.waga){
- kr.w.setWaga(kr.w, kr.i+u.waga);
- kr.w.zwiekszOdleglosc(kr.w);
- }
- kr.w.setPoprzednik(u);
- list.add(kr.w);
- }
- }
- graf.get(i).setBlack(graf.get(i));
- }
- }
- }
- public class Bfs {
- public static void main(String[] args) throws FileNotFoundException{
- Scanner sc = new Scanner(new File("H:\\java\\workspace\\klasa3\\src\\grafy\\Bfs.txt"));
- List<W> graf = new ArrayList<W>();
- W w; Kr kr;
- int n = sc.nextInt(), x = sc.nextInt();
- for(int i=0;i<n;++i){
- w = new W();
- w.setNumber(i);
- graf.add(w);
- }
- while(sc.hasNext()){
- int a = sc.nextInt(), b = sc.nextInt(), c = sc.nextInt();
- kr = new Kr();
- kr.w=graf.get(b);
- kr.i=c;
- graf.get(a).addConnection(kr);
- }
- sc.close();
- w = new W();
- w.printConnections(graf);
- w.Dijkstra(graf, x);
- for(int i=0;i<n;++i){
- System.out.print(x+" -> "+ graf.get(i).getNumber(graf.get(i)) +" waga "+graf.get(i).getWaga(graf.get(i))+" trasa: ");
- System.out.print(graf.get(i).getNumber(graf.get(i)));
- int j=graf.get(i).getNumber(graf.get(i));
- while(graf.get(j).getNumber(graf.get(j))!=x){
- j=graf.get(j).getNumber(graf.get(j).getPoprzednik(graf.get(j)));
- System.out.print("<-"+graf.get(j).getNumber(graf.get(j)));
- }
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement