KDfs.cpp 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n, m, flag = 0;
  4. char s[500][500];
  5. bool use[500][500];
  6. void dfs(int x, int y) {
  7. if (x < 0 || x >= n || y < 0 || y >= m || s[x][y] == 'x' || use[x][y])
  8. return;
  9. if (s[x][y] == 'L') {
  10. use[x][y] = true;
  11. flag = 1;
  12. return;
  13. }
  14. use[x][y] = true;
  15. dfs(x + 1, y);
  16. dfs(x, y + 1);
  17. dfs(x - 1, y);
  18. dfs(x, y - 1);
  19. }
  20. int main() {
  21. int Startx, Starty;
  22. while (cin >> n >> m) {
  23. flag = 0;
  24. for (int i = 0; i < n; i++)
  25. for (int j = 0; j < m; j++)
  26. use[i][j] = false;
  27. for (int i = 0; i < n; i++) {
  28. for (int j = 0; j < m; j++) {
  29. cin >> s[i][j];
  30. if (s[i][j] == 'S') {
  31. Startx = i;
  32. Starty = j;
  33. }
  34. }
  35. }
  36. dfs(Startx, Starty);
  37. flag ? cout << "I saved him." << endl : cout << "Sorry, I can't save him." << endl;
  38. }
  39. }