Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstdlib>
- #include <cmath>
- using namespace std;
- class Mapa{
- public:
- int x,y;
- int z;
- int odleglosc;
- bool sprawdzony;
- Mapa *up,*down, *left, *right;
- Mapa *trasa;
- Mapa(int a, int b){
- x = a;
- y = b;
- sprawdzony = false;
- odleglosc = 999;
- }
- Mapa(){
- x = 0;
- y = 0;
- sprawdzony = false;
- odleglosc = 999;
- }
- ~Mapa(){
- delete up;
- delete down;
- delete left;
- delete right;
- }
- void wczytajSasiadow(Mapa * gora, Mapa * dol, Mapa * lewo, Mapa * prawo)
- {
- up = gora;
- down = dol;
- left = lewo;
- right = prawo;
- }
- Mapa *sprawdzGore()
- {
- return up;
- }
- Mapa *sprawdzDol()
- {
- return down;
- }
- Mapa *sprawdzLewo()
- {
- return left;
- }
- Mapa *sprawdzPrawo()
- {
- return right;
- }
- };
- //zmienne globalne
- int p_x,p_y;
- int k_x,k_y;
- const int szerokosc = 10;
- const int wysokosc = 10;
- const int rozm = szerokosc*wysokosc;
- Mapa *trasa;
- Mapa ***map;
- fstream plik;
- int petla = 0;
- void wypiszCzySasiedzi(){
- int i, j;
- int sasiedzi=0;
- cout<<endl<<endl;
- for (i=0;i<wysokosc;i++){
- for (j=0;j<szerokosc;j++){
- sasiedzi =0;
- if(map[i][j]->sprawdzGore()){
- sasiedzi++;
- }
- if(map[i][j]->sprawdzDol()){
- sasiedzi++;
- }
- if(map[i][j]->sprawdzLewo()){
- sasiedzi++;
- }
- if(map[i][j]->sprawdzPrawo()){
- sasiedzi++;
- }
- cout<<sasiedzi;
- }
- cout<<endl;
- }
- cout<<endl<<endl;
- }
- void wczytajMape() {
- plik.open("mapa.txt", ios::in);
- if ((plik.good() == true) && (plik.is_open() == true))
- {
- char znak;
- int k=0;
- for (int i=0; i<wysokosc; i++) {
- for (int j=0; j<szerokosc; j++) {
- map[i][j] = new Mapa(i,j);
- }
- }
- for (int i=0; i<wysokosc; i++) {
- for (int j=0; j<szerokosc; j++) {
- if(i>0 && j> 0 && i < 9 && j < 9)
- map[i][j]->wczytajSasiadow(map[i-1][j],map[i+1][j],map[i][j-1],map[i][j+1]); //srodek
- else if(i>0 && i < 9 && j == 0)
- map[i][j]->wczytajSasiadow(map[i-1][j],map[i+1][j],NULL,map[i][j+1]); //j=0
- else if(i>0 && i < 9 && j == 9)
- map[i][j]->wczytajSasiadow(map[i-1][j],map[i+1][j],map[i][j-1],NULL); //j=9
- else if(i==0 && j== 0)
- map[i][j]->wczytajSasiadow(NULL,map[i+1][j],NULL,map[i][j+1]); //00
- else if(i==9 && j== 9)
- map[i][j]->wczytajSasiadow(map[i-1][j],NULL,map[i][j-1],NULL); //99
- else if(i== 0 && j >0 && j <9)
- map[i][j]->wczytajSasiadow(NULL,map[i+1][j],map[i][j-1],map[i][j+1]); //i=0
- else if(i== 9 && j >0 && j <9)
- map[i][j]->wczytajSasiadow(map[i-1][j],NULL,map[i][j-1],map[i][j+1]); //i=9
- else if(i== 9 && j == 0)
- map[i][j]->wczytajSasiadow(map[i-1][j],NULL,NULL,map[i][j+1]); //i=9
- else if(i== 0 && j == 9)
- map[i][j]->wczytajSasiadow(NULL,map[i+1][j],map[i][j-1],NULL); //i=9
- else
- cout<<"Inni sasiedzi!"<<endl;
- if(plik>>znak != '\0') {
- if (znak == 1) {
- map[i][j]->z = '1';
- }
- else if (znak == 1) {
- p_x = j;
- p_y = i;
- map[i][j]->z = '2';
- }
- else if (znak == 3) {
- k_x = j;
- k_y = i;
- map[i][j]->z = '3';
- }
- else if(znak == 0) {
- map[i][j]->z = '0';
- }
- k++;
- }
- }
- }
- }
- plik.close();
- }
- void wypiszMape(){
- int i, j;
- for (i=0;i<wysokosc;i++){
- for (j=0;j<szerokosc;j++){
- cout<<map[i][j]->x<<map[i][j]->y<<map[i][j]->odleglosc<<endl;
- }
- cout<<endl;
- }
- for (i=0;i<wysokosc;i++){
- for (j=0;j<szerokosc;j++){
- cout<<map[i][j]->odleglosc<<"\t";
- }
- cout<<endl;
- }
- }
- void oblOdl(Mapa *wsk, int odl){
- petla++;
- if(wsk->sprawdzony == false){
- if (wsk->z == 49){
- wsk->odleglosc = 999;
- }
- else{
- wsk->sprawdzony = true;
- wsk->odleglosc;
- if(wsk->z == 'k'){
- }
- else{
- wsk->sprawdzony = true;
- wsk->odleglosc;
- Mapa *pom;
- if(wsk->sprawdzGore() ){
- pom = wsk->sprawdzGore();
- oblOdl(pom, odl+1);
- }
- if(wsk->sprawdzDol()){
- pom = wsk->sprawdzDol();
- oblOdl(wsk->sprawdzDol(), odl+1);
- }
- if(wsk->sprawdzLewo()){
- pom = wsk->sprawdzLewo();
- oblOdl(wsk->sprawdzLewo(), odl+1);
- }
- if(wsk->sprawdzPrawo()){
- pom = wsk->sprawdzPrawo();
- oblOdl(wsk->sprawdzPrawo(), odl+1);
- }
- }
- }
- }
- else {
- }
- }
- void wyznaczDroge(Mapa *wsk){
- int droga = wsk->odleglosc;
- droga--;
- Mapa *pom = wsk;
- pom->z = 'X';
- while (pom->odleglosc != 0){
- if(pom->sprawdzGore()->odleglosc =(droga)){
- pom->trasa = pom->sprawdzGore();
- pom->z = 'X';
- pom = pom->sprawdzGore();
- }else if(pom->sprawdzDol()->odleglosc==(droga)){
- pom->trasa = pom->sprawdzDol();
- pom->z = 'X';
- pom = pom->sprawdzDol();
- }else if(pom->sprawdzLewo()->odleglosc==(droga)){
- pom->trasa = pom->sprawdzLewo();
- pom->z = 'X';
- pom = pom->sprawdzLewo();
- }else if(pom->sprawdzPrawo()->odleglosc==(droga)){
- pom->trasa = pom->sprawdzPrawo();
- pom->z = 'X';
- pom = pom->sprawdzPrawo();
- }
- droga--;
- }
- }
- void wypiszTrase(){
- for (int i = 0; i<szerokosc;i++){
- for(int j=0;j<wysokosc;j++){
- cout<<map[i][j]->z;
- }
- cout<<endl;
- }
- }
- int main(){
- map = new Mapa **[szerokosc];
- for (int i =0; i<wysokosc; i++){
- map[i] = new Mapa *[wysokosc];
- }
- wczytajMape();
- Mapa *wsk = map[p_x][p_y];
- oblOdl(wsk, 0);
- cout<<k_x<<k_y<<endl<<endl;
- wsk = map[k_y][k_x];
- cout<<wsk->z<<endl;
- wypiszMape();
- wyznaczDroge(wsk);
- wypiszTrase();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement