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