Advertisement
a53

abq

a53
Jun 28th, 2019
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. // Prof. Nicu Vlad-Laurentiu
  2. #include<fstream>
  3. #define N 302
  4. #define D 100002
  5. #include<cstring>
  6. using namespace std;
  7. int a[N][N];
  8. char v[N][N];
  9. int m,n;
  10. //xi yi=pozitiile initial
  11. //xf,yf=pozitiile finale
  12. //m,n dimensiunile matricii
  13. const int dx[]={0,0,0,1,-1};
  14. const int dy[]={0,1,-1,0,0};
  15. //am presupus ca se poate merge in 4 directii: sus, jos, st,dr
  16. int cx[D],cy[D];
  17. //coada
  18. int lee(int xi,int yi,int xf,int yf)
  19. {
  20. int f,b,x,y,xx,yy,i;
  21. memset(a,0,sizeof(a));
  22. b=1;
  23. f=1;
  24. cx[f]=xi;
  25. cy[f]=yi;
  26. while (f<=b)
  27. {
  28. x=cx[f];
  29. y=cy[f];
  30. f++;
  31. for (i=1;i<=4;i++)
  32. {
  33. xx=x+dx[i];
  34. yy=y+dy[i];
  35. if (xx==xf&&yy==yf)
  36. return a[x][y]+1;
  37. //nu fac bordare si verific daca cooronatele se afla in matrice
  38. if (xx>0&&yy>0&&xx<=n&&yy<=m)
  39. {
  40. //verific daca locul respectiv e liber si daca casuta nu a mai fost vizitata
  41. if (v[xx][yy]=='a'&&a[xx][yy]==0)
  42. {
  43. a[xx][yy]=a[x][y]+1;
  44. b++;
  45. cx[b]=xx;
  46.  
  47. cy[b]=yy;
  48. }
  49. }
  50. }
  51. }
  52. return a[xf][yf];
  53. }
  54. int main()
  55. {
  56. int i,j,q,xi,yi,xf,yf;
  57. char ch[N+1];
  58. FILE *fin=fopen("abq.in","rt");
  59. ofstream fout("abq.out");
  60. fscanf(fin,"%d%d",&n,&m);
  61. for (i=1;i<=n;i++)
  62. { fscanf(fin,"%s",ch);
  63. for (j=0;j<strlen(ch);j++) v[i][j+1]=ch[j];
  64. }
  65. fscanf(fin,"%d",&q);
  66. for (i=1;i<=q;i++)
  67. {
  68. fscanf(fin,"%d%d%d%d",&xi,&yi,&xf,&yf);
  69. if(v[xi][yi]=='b'||v[xf][yf]=='b') fout<<-1<<'\n';
  70. else if(v[xi][yi]=='a'){int k=lee(xi,yi,xf,yf);
  71. fout<<(k==0?-1:k+1)<<'\n';}
  72. else fout<<-1<<'\n';
  73. }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement