main.cc 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. expand()
  30. int main() {
  31. int n;
  32. for (;;) {
  33. scanf("%d", &n);
  34. if (n == 0) break;
  35. Pos src, dst;
  36. for (int i = 0; i < n; i++) {
  37. scanf("%s\n", grid[i]);
  38. for (int j = 0; j < n; j++) {
  39. char c = grid[i][j];
  40. switch (c) {
  41. case 'H':
  42. src.xa = i;
  43. src.ya = j;
  44. break;
  45. case 'S':
  46. dst.xa = i;
  47. dst.ya = j;
  48. break;
  49. case 'h':
  50. src.xi = i;
  51. src.yi = j;
  52. break;
  53. case 's':
  54. dst.xi = i;
  55. dst.yi = j;
  56. break;
  57. }
  58. }
  59. }
  60. memset(used, 0, sizeof(used));
  61. priority_queue<Pos> pq;
  62. pq.push(src);
  63. used[][][][] = true;
  64. while (!pq.empty()) {
  65. }
  66. }
  67. return 0;
  68. }