Advertisement
kator

labirynt

Oct 9th, 2014
449
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.66 KB | None | 0 0
  1. package grafy;
  2.  
  3. import java.io.File;
  4. import java.io.FileNotFoundException;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import java.util.Scanner;
  8.  
  9. public class Labirynt{
  10.     static W tab[][] = new W[100][100];
  11.    
  12.     static void BFS(List<W> graf, int s){
  13.         List<W> list = new ArrayList<W>();
  14.         for(int i=0;i<graf.size();++i){
  15.                 graf.get(i).setWhite(graf.get(i));
  16.                 graf.get(i).setPoprzednik(null);
  17.                 graf.get(i).setOdleglosc(graf.get(i), -1);
  18.         }
  19.         graf.get(s).setGray(graf.get(s));
  20.         graf.get(s).setOdleglosc(graf.get(s),0);
  21.         graf.get(s).setPoprzednik(null);
  22.         list.add(graf.get(s));
  23.         while(!list.isEmpty()){
  24.                 W u = list.get(0);
  25.                 list.remove(0);
  26.                 for(Kr v: u.laczenia)
  27.                 {
  28.                         if(v.w.isWhite(v.w)){
  29.                                 v.w.setGray(v.w);
  30.                                 v.w.setOdleglosc(v.w, u.getOdleglosc(u)+1);
  31.                                 v.w.setPoprzednik(u);
  32.                                 list.add(v.w);
  33.                         }
  34.                 }
  35.                 u.setBlack(graf.get(u.number));
  36.         }
  37. }
  38.    
  39.     static void AddConnect(W w, W[][] tab){
  40.         int x=w.x,
  41.             y=w.y;
  42.         Kr kr;
  43.         if(tab[x-1][y]!=null){
  44.             kr = new Kr();
  45.             kr.w=tab[x-1][y];
  46.             w.addConnection(kr);
  47.         }
  48.         if(tab[x+1][y]!=null){
  49.             kr = new Kr();
  50.             kr.w=tab[x+1][y];
  51.             w.addConnection(kr);
  52.         }
  53.         if(tab[x][y-1]!=null){
  54.             kr = new Kr();
  55.             kr.w=tab[x][y-1];
  56.             w.addConnection(kr);
  57.         }
  58.         if(tab[x][y+1]!=null){
  59.             kr = new Kr();
  60.             kr.w=tab[x][y+1];
  61.             w.addConnection(kr);
  62.         }
  63.     }
  64.     static void MakePath(W s, W k){
  65.         W w=k;
  66.         while(w!=s){
  67.             w.getPoprzednik(w).c='+';
  68.             w=w.getPoprzednik(w);
  69.         }
  70.     }
  71.     static void PrintPath(List<W> graf, W ws, W wk){
  72.         MakePath(ws, wk);
  73.         for(int i=0;i<50;++i){
  74.             for(int j=0;j<50;++j){
  75.                 System.out.print(tab[i][j].c);
  76.             }
  77.             System.out.println();
  78.         }
  79.     }
  80.     public static void main(String[] args) throws FileNotFoundException {
  81.         // TODO Auto-generated method stub
  82.         Scanner sc = new Scanner(new File("H:\\java\\workspace\\klasa3\\src\\grafy\\labirynt.txt"));
  83.         List<W> graf = new ArrayList<W>();
  84.         W w; Kr kr;
  85. //        w.BFS(graf, 0);
  86. //        sc.close();
  87.         int Sx =0, Sy =0, Kx=0, Ky=0, y=0;
  88. //        W tab[][] = new W[100][100];
  89.         for(W[] t: tab){
  90.             for(W z: t){
  91.                 z=null;
  92.             }
  93.         }
  94.         int asd=0;
  95.         while(sc.hasNext()){
  96.            
  97.             String str = sc.nextLine();
  98.             if(str.charAt(0)=='*')continue;
  99.             for(int x=0; x<str.length();++x){
  100.                 if(str.charAt(x)=='#')continue;
  101.                 else if(str.charAt(x)=='S'){
  102.                     Sx=x;
  103.                     Sy=y;
  104.                     w = new W();
  105.                     w.x=x;
  106.                     w.y=y;
  107.                     w.setNumber(asd);
  108.                     ++asd;
  109.                     tab[x][y]=w;
  110.                     graf.add(w);
  111.                 }
  112.                 else if(str.charAt(x)=='W'){
  113.                     Kx=x;
  114.                     Ky=y;
  115.                     w = new W();
  116.                     w.x=x;
  117.                     w.y=y;
  118.                     w.setNumber(asd);
  119.                     ++asd;
  120.                     tab[x][y]=w;
  121.                     graf.add(w);
  122.                 }
  123.                 else if(str.charAt(x)=='.'){
  124.                     w = new W();
  125.                     w.x=x;
  126.                     w.y=y;
  127.                     w.setNumber(asd);
  128.                     ++asd;
  129.                     tab[x][y]=w;
  130.                     graf.add(w);
  131.                 }
  132.             }
  133.             ++y;
  134.         }
  135.         for(W[] t: tab){
  136.             for(W z: t){
  137.                 if(z!=null)
  138.                     AddConnect(z, tab);
  139.             }
  140.         }
  141.         w =tab[Sx][Sy];
  142.         int source = tab[Sx][Sy].getNumber(tab[Sx][Sy]);
  143.        
  144.         BFS(graf, source);
  145.         W ws=tab[Sx][Sy],
  146.             wk=tab[Kx][Ky];
  147.         PrintPath(graf,ws,wk);
  148.         sc.close();
  149.     }
  150.  
  151. }
  152.  
  153. ########################################
  154. #S.##..#.....###.................##....#
  155. ##.#.....#.#...#.######.###..###.#..####
  156. #..#.###.#.#.###.#....###.##.#.........#
  157. ##...#.###.#.#...#.#.##......###########
  158. ####.....###.#.###.#.#..#..#..#........#
  159. #.....##.#...#.....#.##.#.############.#
  160. #####..###.#########.#..#.#............#
  161. #........#.#.........##.#.##.###.#####.#
  162. #.###.##.#.#.#######..#.#..#.#.#.....#.#
  163. #...#..#.#.#.#........#.####.#.#####.#.#
  164. ###.####.#.#.###.#.#..#......#.......#.#
  165. #...#....#.#.....#######.#####.#####.#.#
  166. ###.#.#.##.#####.#.....#.......#.....#.#
  167. #...###....###.#.#.#.#.###############.#
  168. #.#...########.#.#.#.#.................#
  169. ###.#.#........#.#.#########.###########
  170. #...#....#####.#.#...#.....#.......#...#
  171. #.########...###.#.#.#.#####.#.###.#.###
  172. #..........#.....#.#.........#...#....W#
  173. ########################################
  174. *
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement