fork download
  1. //problem 3
  2.  
  3. #include <bits/stdc++.h>
  4. using namespace std;
  5.  
  6. int n, m;
  7. char grid[105][105];
  8. int vis[105][105];
  9. int level[105][105];
  10. pair<int,int> par[105][105];
  11.  
  12. vector<pair<int, int>> b = {{2, 1}, {2, -1}, {1, 2}, {1, -2},
  13. {-2, 1}, {-2, -1}, {-1, 2}, {-1, -2}};
  14.  
  15. bool valid(int i, int j) {
  16. return !(i < 0 || i >= n || j < 0 || j >= m);
  17. }
  18.  
  19. void bfs(int si, int sj) {
  20. queue<pair<int, int>> q;
  21. q.push({si, sj});
  22. vis[si][sj] = true;
  23. level[si][sj] = 0;
  24.  
  25. while(!q.empty()) {
  26. int pi = q.front().first;
  27. int pj = q.front().second;
  28. q.pop();
  29.  
  30. for (int i = 0; i < 8; i++) {
  31. int ci = pi + b[i].first;
  32. int cj = pj + b[i].second;
  33.  
  34. if(valid(ci, cj) && !vis[ci][cj]) {
  35. q.push({ci, cj});
  36. vis[ci][cj] = true;
  37. level[ci][cj] = level[pi][pj] + 1;
  38. par[ci][cj] = {pi,pj};
  39. }
  40. }
  41. }
  42. }
  43.  
  44.  
  45.  
  46. int main() {
  47.  
  48. int t; cin >> t;
  49.  
  50. while(t--) {
  51. cin >> n >> m;
  52.  
  53. int ki, kj, qi, qj;
  54. cin >> ki >> kj;
  55. cin >> qi >> qj;
  56.  
  57. memset(vis, false, sizeof(vis));
  58. memset(level, -1, sizeof(level));
  59. memset(par, -1, sizeof(par));
  60.  
  61. bfs(ki, kj);
  62.  
  63. cout << level[qi][qj] << endl;
  64. }
  65.  
  66. return 0;
  67. }
  68.  
Success #stdin #stdout 0.01s 5316KB
stdin
Standard input is empty
stdout
Standard output is empty