Advertisement
Guest User

Untitled

a guest
May 25th, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstdlib>
  4. #include <cmath>
  5.  
  6.  
  7. using namespace std;
  8.  
  9.  
  10. class Mapa{
  11.     public:
  12.         int x,y;
  13.         int z;
  14.         int odleglosc;
  15.         bool sprawdzony;
  16.         Mapa *up,*down, *left, *right;
  17.         Mapa *trasa;
  18.        
  19.         Mapa(int a, int b){
  20.             x = a;
  21.             y = b;
  22.             sprawdzony = false;
  23.             odleglosc = 999;
  24.         }
  25.         Mapa(){
  26.             x = 0;
  27.             y = 0;
  28.             sprawdzony = false;
  29.             odleglosc = 999;
  30.         }
  31.         ~Mapa(){
  32.             delete up;
  33.             delete down;
  34.             delete left;
  35.             delete right;
  36.         }  
  37.  
  38.         void wczytajSasiadow(Mapa * gora, Mapa * dol, Mapa * lewo, Mapa * prawo)
  39.         {
  40.             up = gora;
  41.             down = dol;
  42.             left = lewo;
  43.             right = prawo;
  44.         }
  45.         Mapa *sprawdzGore()
  46.         {
  47.             return up;
  48.         }
  49.         Mapa *sprawdzDol()
  50.         {
  51.             return down;
  52.         }
  53.         Mapa *sprawdzLewo()
  54.         {
  55.             return left;
  56.         }
  57.         Mapa *sprawdzPrawo()
  58.         {
  59.             return right;
  60.         }
  61. };
  62.  
  63. //zmienne globalne
  64.  
  65.     int p_x,p_y;
  66.     int k_x,k_y;
  67.     const int szerokosc = 10;
  68.     const int wysokosc = 10;
  69.     const int rozm = szerokosc*wysokosc;
  70.     Mapa *trasa;
  71.     Mapa ***map;
  72.  
  73.     fstream plik;
  74.     int petla = 0;
  75.  
  76. void wypiszCzySasiedzi(){
  77.     int i, j;
  78.     int sasiedzi=0;
  79.     cout<<endl<<endl;
  80.     for (i=0;i<wysokosc;i++){
  81.         for (j=0;j<szerokosc;j++){
  82.             sasiedzi =0;
  83.             if(map[i][j]->sprawdzGore()){
  84.                 sasiedzi++;
  85.             }
  86.             if(map[i][j]->sprawdzDol()){
  87.                 sasiedzi++;
  88.             }
  89.             if(map[i][j]->sprawdzLewo()){
  90.                 sasiedzi++;
  91.             }
  92.             if(map[i][j]->sprawdzPrawo()){
  93.                 sasiedzi++;
  94.             }
  95.             cout<<sasiedzi;
  96.         }
  97.         cout<<endl;
  98.     }  
  99.     cout<<endl<<endl;
  100. }
  101.  
  102. void wczytajMape() {
  103.     plik.open("mapa.txt", ios::in);
  104.     if ((plik.good() == true) && (plik.is_open() == true))
  105.     {
  106.         char znak;
  107.         int k=0;
  108.         for (int i=0; i<wysokosc; i++) {
  109.             for (int j=0; j<szerokosc; j++) {
  110.                 map[i][j] = new Mapa(i,j);
  111.             }
  112.         }
  113.         for (int i=0; i<wysokosc; i++) {
  114.             for (int j=0; j<szerokosc; j++) {
  115.                 if(i>0 && j> 0 && i < 9 && j < 9)
  116.                     map[i][j]->wczytajSasiadow(map[i-1][j],map[i+1][j],map[i][j-1],map[i][j+1]); //srodek
  117.                 else if(i>0 && i < 9 && j == 0)
  118.                     map[i][j]->wczytajSasiadow(map[i-1][j],map[i+1][j],NULL,map[i][j+1]);  //j=0
  119.                 else if(i>0 && i < 9 && j == 9)
  120.                     map[i][j]->wczytajSasiadow(map[i-1][j],map[i+1][j],map[i][j-1],NULL); //j=9
  121.                 else if(i==0 && j== 0)
  122.                     map[i][j]->wczytajSasiadow(NULL,map[i+1][j],NULL,map[i][j+1]); //00
  123.                 else if(i==9 && j== 9)
  124.                     map[i][j]->wczytajSasiadow(map[i-1][j],NULL,map[i][j-1],NULL); //99
  125.                 else if(i==  0 && j >0 && j <9)
  126.                     map[i][j]->wczytajSasiadow(NULL,map[i+1][j],map[i][j-1],map[i][j+1]); //i=0
  127.                 else if(i==  9 && j >0 && j <9)
  128.                     map[i][j]->wczytajSasiadow(map[i-1][j],NULL,map[i][j-1],map[i][j+1]); //i=9
  129.                 else if(i==  9 && j == 0)
  130.                     map[i][j]->wczytajSasiadow(map[i-1][j],NULL,NULL,map[i][j+1]); //i=9
  131.                 else if(i==  0 && j == 9)
  132.                     map[i][j]->wczytajSasiadow(NULL,map[i+1][j],map[i][j-1],NULL); //i=9
  133.                 else
  134.                     cout<<"Inni sasiedzi!"<<endl;
  135.                
  136.                 if(plik>>znak != '\0') {
  137.                     if (znak == 1) {
  138.                         map[i][j]->z = '1';
  139.                     }
  140.                     else if (znak == 1) {
  141.                         p_x = j;
  142.                         p_y = i;
  143.                         map[i][j]->z = '2';
  144.                     }
  145.                     else if (znak == 3) {
  146.                         k_x = j;
  147.                         k_y = i;
  148.                         map[i][j]->z = '3';
  149.                     }
  150.                     else if(znak == 0) {
  151.                         map[i][j]->z = '0';
  152.                     }
  153.                     k++;
  154.                 }
  155.             }
  156.         }
  157.     }
  158.     plik.close();
  159. }
  160.  
  161. void wypiszMape(){
  162.     int i, j;
  163.     for (i=0;i<wysokosc;i++){
  164.         for (j=0;j<szerokosc;j++){
  165.             cout<<map[i][j]->x<<map[i][j]->y<<map[i][j]->odleglosc<<endl;
  166.         }
  167.         cout<<endl;
  168.     }
  169.     for (i=0;i<wysokosc;i++){
  170.         for (j=0;j<szerokosc;j++){
  171.             cout<<map[i][j]->odleglosc<<"\t";
  172.         }
  173.         cout<<endl;
  174.     }
  175. }
  176.  
  177. void oblOdl(Mapa *wsk, int odl){
  178.    
  179.     petla++;
  180.      if(wsk->sprawdzony == false){
  181.         if (wsk->z == 49){
  182.             wsk->odleglosc = 999;
  183.         }
  184.         else{
  185.             wsk->sprawdzony = true;
  186.             wsk->odleglosc;
  187.             if(wsk->z == 'k'){
  188.             }
  189.             else{
  190.                 wsk->sprawdzony = true;
  191.                 wsk->odleglosc;
  192.                 Mapa *pom;
  193.                
  194.                 if(wsk->sprawdzGore() ){
  195.                     pom = wsk->sprawdzGore();
  196.                     oblOdl(pom, odl+1);
  197.                 }
  198.                 if(wsk->sprawdzDol()){
  199.                     pom = wsk->sprawdzDol();
  200.                     oblOdl(wsk->sprawdzDol(), odl+1);
  201.                 }
  202.                 if(wsk->sprawdzLewo()){
  203.                     pom = wsk->sprawdzLewo();
  204.                     oblOdl(wsk->sprawdzLewo(), odl+1);
  205.                 }
  206.                 if(wsk->sprawdzPrawo()){
  207.                     pom = wsk->sprawdzPrawo();
  208.                     oblOdl(wsk->sprawdzPrawo(), odl+1);
  209.                 }
  210.             }
  211.         }
  212.     }
  213.     else {
  214.     }
  215. }
  216.  
  217. void wyznaczDroge(Mapa *wsk){
  218.     int droga = wsk->odleglosc;
  219.     droga--;
  220.     Mapa *pom = wsk;
  221.     pom->z = 'X';
  222.    
  223.     while (pom->odleglosc != 0){
  224.         if(pom->sprawdzGore()->odleglosc =(droga)){
  225.             pom->trasa = pom->sprawdzGore();
  226.             pom->z = 'X';
  227.             pom = pom->sprawdzGore();
  228.            
  229.         }else if(pom->sprawdzDol()->odleglosc==(droga)){
  230.             pom->trasa = pom->sprawdzDol();
  231.             pom->z = 'X';
  232.             pom = pom->sprawdzDol();
  233.        
  234.         }else if(pom->sprawdzLewo()->odleglosc==(droga)){
  235.             pom->trasa = pom->sprawdzLewo();
  236.             pom->z = 'X';
  237.             pom = pom->sprawdzLewo();
  238.        
  239.         }else if(pom->sprawdzPrawo()->odleglosc==(droga)){
  240.             pom->trasa = pom->sprawdzPrawo();
  241.             pom->z = 'X';
  242.             pom = pom->sprawdzPrawo();
  243.        
  244.         }
  245.         droga--;
  246.     }
  247.  
  248. }
  249. void wypiszTrase(){
  250.     for (int i = 0; i<szerokosc;i++){
  251.         for(int j=0;j<wysokosc;j++){
  252.             cout<<map[i][j]->z;
  253.         }
  254.         cout<<endl;
  255.     }
  256. }
  257. int main(){
  258.    
  259.     map = new Mapa **[szerokosc];
  260.     for (int i =0; i<wysokosc; i++){
  261.         map[i] = new Mapa *[wysokosc];
  262.     }
  263.     wczytajMape();
  264.     Mapa *wsk = map[p_x][p_y];
  265.     oblOdl(wsk, 0);
  266.     cout<<k_x<<k_y<<endl<<endl;        
  267.     wsk = map[k_y][k_x];
  268.     cout<<wsk->z<<endl;
  269.     wypiszMape();
  270.     wyznaczDroge(wsk);
  271.     wypiszTrase();
  272.     system("pause");
  273.     return 0;
  274. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement