Programozás‎ > ‎Feladatok‎ > ‎Kisvakond kalandjai‎ > ‎Megoldás‎ > ‎

og_vakond.cpp

Letöltés: og_vakond.cpp

#include<stdio.h>
#include<iostream>

using namespace std;

void beolvas(char*);

int m,t;
int n;
int** b;

struct koord
{
    int x;
    int y;
} ;

void keres(koord);
bool haze(koord);

koord s,c;

struct haz
{
    koord eleje;
    koord vege;
};

haz* hazak;


int main()
{
    beolvas("vakond2.txt");
    b = new int*[m+2];
    for(int i=0; i<m+1; i++)
    {
        b[i]=new int[m+2];
        for(int j=0; j<m+1; j++)
        {
            b[i][j]=m*m+1;
        }
    }
    b[0][0]=0;
/*    koord t;
    t.x=0;
    t.y=10;
    cout << haze(t);*/
    keres(s);
    cout << b[c.x][c.y] << "\n";
}

void beolvas(char* file)
{
    FILE* be = fopen(file,"r");
    fscanf(be,"%d" ,&m);
    fscanf(be,"%d" ,&t);

    fscanf(be, "%d", &s.x);
    fscanf(be, "%d", &s.y);
    fscanf(be, "%d", &c.x);
    fscanf(be, "%d", &c.y);
    s.x--;
    s.y--;
    c.x--;
    c.y--;

    fscanf(be, "%d", &n);
    hazak = new haz[n+1];
    for(int i=0; i<n; i++)
    {
        fscanf(be, "%d",&hazak[i].eleje.x);
        fscanf(be, "%d",&hazak[i].eleje.y);
        fscanf(be, "%d",&hazak[i].vege.x);
        fscanf(be, "%d",&hazak[i].vege.y);
        hazak[i].eleje.x--;
        hazak[i].eleje.y--;
        hazak[i].vege.x--;
        hazak[i].vege.y--;
    }

  /*  cout << m << " "<< t<< "\n";
    cout << s.x << " " << s.y << " "  << c.x << " " << c.y << "\n" << n  <<"\n";

    for(int i=0; i<n; i++)
    {
        cout << hazak[i].eleje.x << " ";
        cout << hazak[i].eleje.y << " ";
        cout << hazak[i].vege.x << " ";
        cout << hazak[i].vege.y << "\n";
    }*/
    fclose(be);

}

void keres(koord at)
{

    if((at.x==c.x)&&(at.y==c.y)) {return;}
  //  cout << at.x << " " << at.y << " "<< b[at.x][at.y]  <<"\n";
    koord uj;

    uj.x=at.x+1;
    uj.y=at.y;
    if(((uj.x<m+1) && (!haze(uj))) && (b[uj.x][uj.y]>b[at.x][at.y]+1)) {b[uj.x][uj.y]=b[at.x][at.y]+1;  keres(uj); }
    uj.x--;

    uj.y++;
    if(((uj.y<m+1) && (!haze(uj))) && (b[uj.x][uj.y]>b[at.x][at.y]+1)) {b[uj.x][uj.y]=b[at.x][at.y]+1;  keres(uj); }
    uj.y--;

    uj.x--;
    if(((uj.x>-1) && (!haze(uj))) && (b[at.x-1][at.y]>b[at.x][at.y]+1)) {b[uj.x][uj.y]=b[at.x][at.y]+1; keres(uj); }
    uj.x++;

    uj.y--;
    if(((uj.y>-1) && (!haze(uj))) && (b[uj.x][uj.y]>b[at.x][at.y]+1)) {b[uj.x][uj.y]=b[at.x][at.y]+1; keres(uj); }
    uj.y++;

    return;
}

bool haze(koord at)
{
    //cout << at.x << " " << at.y << "\n";
    for(int i=0; i<n; i++)
    {
        if(((at.x>=hazak[i].eleje.x) && (at.x<=hazak[i].vege.x)) && ((at.y>=hazak[i].eleje.y) && (at.y<=hazak[i].vege.y))) {return true;}
    }

    return false;
}