Răspuns :
#include <fstream>
#include <cstring>
using namespace std;
int mat[202][202];
int matcpy[202][202];
struct ec{int x,y,p;};//element coada
ec coada[202*202];
void adaugavecini(ec x, int& k){
if(matcpy[x.x+1][x.y]==0){
coada[k].x = x.x+1;
coada[k].y = x.y;
coada[k].p=x.p+1;
k++;
matcpy[x.x+1][x.y]=1;
}
if(matcpy[x.x-1][x.y]==0){
coada[k].x = x.x-1;
coada[k].y = x.y;
coada[k].p = x.p+1;
k++;
matcpy[x.x-1][x.y]=1;
}
if(matcpy[x.x][x.y+1]==0){
coada[k].x = x.x;
coada[k].y = x.y+1;
coada[k].p = x.p+1;
k++;
matcpy[x.x][x.y+1]=1;
}
if(matcpy[x.x][x.y-1] == 0){
coada[k].x = x.x;
coada[k].y = x.y-1;
coada[k].p=x.p+1;
k++;
matcpy[x.x][x.y-1]=1;
}
}
int parcurgere(int x1, int y1, int x2, int y2){
int k = 0;
coada[k].x=x1,coada[k].y=y1,coada[k].p=1;
k++;
int kc = 0;
while(true){
int kc2=k;
for(int i = kc; i < kc2; i++){
adaugavecini(coada[i], k);
}
kc = kc2;
if(k == kc)return -1;
for(int i = kc; i < k; i++)
if(coada[i].x==x2&& coada[i].y == y2)return coada[i].p;
}
}
int main(){
ifstream fin("abq.in");
ofstream fout("abq.out");
int n,m,q;
char c;
fin>>n>>m;
for (int i = 0; i <= m+1; i++)
mat[0][i]= mat[n+1][i] = -1;
for(int i = 0; i <= n+1; i++)
mat[i][0] = mat[i][m+1] = -1;
for (int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++){
fin>>c;
mat[i][j]= c=='a'?0:-1;
}
fin>>q;
int x1,y1,x2,y2;
for(int query=0;query<q;query++){
fin>>x1>>y1>>x2>>y2;
if(mat[x1][y1]==-1||mat[x2][y2]==-1){fout<<"-1\n";continue;}
memcpy(matcpy, mat, 202*202*4);
fout << parcurgere(x1,y1,x2,y2)<<'\n';
}
}
Daca ai nelamuriri intreaba-ma
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că resursele disponibile v-au fost de ajutor. Pentru întrebări sau asistență suplimentară, nu ezitați să ne contactați. Ne bucurăm să vă revedem în curând și vă invităm să ne salvați în lista de site-uri preferate!