main.cc 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <queue>
  4. using std::priority_queue;
  5. const int N = 30;
  6. char grid[N][N + 1];
  7. bool used[N][N][N][N];
  8. struct Pos {
  9. int xa;
  10. int ya;
  11. int xi;
  12. int yi;
  13. Pos *p;
  14. Pos(int xa = 0, int ya = 0, int xi = 0, int yi = 0, Pos *p = 0)
  15. : xa(xa), ya(ya), xi(xi), yi(yi), p(p) {}
  16. bool operator==(const Pos &that) const {
  17. return this->xa == that.xa && this->ya == that.ya &&
  18. this->xi == that.xi && this->yi == that.yi;
  19. }
  20. int dist() const {
  21. int dx = xa - xi;
  22. int dy = ya - yi;
  23. return dx * dx + dy * dy;
  24. }
  25. bool operator<(const Pos &that) const {
  26. return this->dist() < that.dist();
  27. }
  28. } close[N][N][N][N];
  29. int main() {
  30. int n;
  31. for (;;) {
  32. scanf("%d", &n);
  33. if (n == 0) break;
  34. Pos src, dst;
  35. for (int i = 0; i < n; i++) {
  36. scanf("%s\n", grid[i]);
  37. for (int j = 0; j < n; j++) {
  38. char c = grid[i][j];
  39. switch (c) {
  40. case 'H':
  41. src.xa = i;
  42. src.ya = j;
  43. break;
  44. case 'S':
  45. dst.xa = i;
  46. dst.ya = j;
  47. break;
  48. case 'h':
  49. src.xi = i;
  50. src.yi = j;
  51. break;
  52. case 's':
  53. dst.xi = i;
  54. dst.yi = j;
  55. break;
  56. }
  57. }
  58. }
  59. memset(used, 0, sizeof(used));
  60. priority_queue<Pos> pq;
  61. pq.push(src);
  62. while (!pq.empty()) {
  63. }
  64. }
  65. return 0;
  66. }