1559.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package A
  2. type node1559 struct {
  3. x, y int
  4. px, py int
  5. }
  6. func containsCycle(grid [][]byte) bool {
  7. m := len(grid)
  8. n := len(grid[0])
  9. if m < 2 || n < 2 {
  10. return false
  11. }
  12. visited := make([][]bool, m)
  13. for i := range visited {
  14. visited[i] = make([]bool, n)
  15. }
  16. dirs := [][2]int{{0, -1}, {0, 1}, {-1, 0}, {1, 0}}
  17. for i := 0; i < m; i++ {
  18. for j := 0; j < n; j++ {
  19. if visited[i][j] {
  20. continue
  21. }
  22. visited[i][j] = true
  23. stack := []node1559{{x: i, y: j, px: -1, py: -1}}
  24. for len(stack) > 0 {
  25. top := stack[len(stack)-1]
  26. stack = stack[:len(stack)-1]
  27. for _, dir := range dirs {
  28. nx := top.x + dir[0]
  29. ny := top.y + dir[1]
  30. if nx < 0 || nx >= m || ny < 0 || ny >= n {
  31. continue
  32. }
  33. if grid[nx][ny] != grid[top.x][top.y] {
  34. continue
  35. }
  36. if !visited[nx][ny] {
  37. visited[nx][ny] = true
  38. stack = append(stack, node1559{x: nx, y: ny, px: top.x, py: top.y})
  39. } else if nx != top.px || ny != top.py {
  40. return true
  41. }
  42. }
  43. }
  44. }
  45. }
  46. return false
  47. }
备用站点 当前处于降级运行的备用站点,仅供应急访问,数据和功能可能不是最新。