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

og_kisvakondA.cpp

Letöltés: og_kisvakondA.cpp

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

using namespace std;


struct koord
{
    int x;
    int y;
};

struct haz
{
  koord e;
  koord v;
};

void beolvas(char*);
bool mehet(koord);

int m,t,n;
koord s,c;
haz* hazak;

int** b;

main()
{
    beolvas("vakond.txt");
    b=new int*[m+2];
    for(int i=1; i<m+2; i++)
    {
        b[i]=new int[m+2];
        for(int j=1; j<m+2; j++)
        {
            b[i][j]=-1;
        }
    }
    b[s.x][s.y]=0;
    bool amig=true;
    koord* tomb;
    tomb=new koord[m*m+1];
    tomb[0]=s;
    int ts=0;
    int tv=1;
    bool found=false;
    while((ts!=tv) && (!found))
    {
        koord temp;
        temp.x=tomb[ts].x+1;
        temp.y=tomb[ts].y;
        if(mehet(temp)) {b[temp.x][temp.y]=b[tomb[ts].x][tomb[ts].y]+1; tomb[tv]=temp; tv++; if((temp.x==c.x) && (temp.y==c.y)) {found=true;} }
        temp.x--;

        temp.y++;
        if(mehet(temp)) {b[temp.x][temp.y]=b[tomb[ts].x][tomb[ts].y]+1; tomb[tv]=temp; tv++; if((temp.x==c.x) && (temp.y==c.y)) {found=true;}}
        temp.y--;

        temp.x--;
        if(mehet(temp)) {b[temp.x][temp.y]=b[tomb[ts].x][tomb[ts].y]+1; tomb[tv]=temp; tv++; if((temp.x==c.x) && (temp.y==c.y)) {found=true;}}
        temp.x++;

        temp.y--;
        if(mehet(temp)) {b[temp.x][temp.y]=b[tomb[ts].x][tomb[ts].y]+1; tomb[tv]=temp; tv++; if((temp.x==c.x) && (temp.y==c.y)) {found=true;}}
        temp.y++;
        ts++;
    }
    if(found)
    {
        cout << b[c.x][c.y];
    }
    else
    {
        cout << "Nincs megoldas.";
    }
}

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);

    fscanf(be, "%d", &n);

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

    fclose(be);
}

bool mehet(koord at)
{
    if(b[at.x][at.y]!=-1) {return false;}
    else if(at.x<1) {return false;}
    else if (at.y<1) {return false;}
    else if (at.x>m) {return false;}
    else if (at.y>m) {return false;}
    for(int i=0; i<n; i++)
    {
        if((hazak[i].e.x<=at.x)&&(hazak[i].v.x>=at.x))
        {
            if((hazak[i].e.y<=at.y)&&(hazak[i].v.y>=at.y))
            {
                return false;
            }
        }
    }
    return true;
}