| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | 
							- func updateBoard(board [][]byte, click []int) [][]byte {
 
- 	y, x := click[0], click[1]
 
- 	if board[y][x] != 'E' {
 
- 		if board[y][x] == 'M' {
 
- 			board[y][x] = 'X'
 
- 		}
 
- 		return board
 
- 	}
 
- 	m, n := len(board), len(board[0])
 
- 	count := make([][]int, m)
 
- 	for i := range count {
 
- 		count[i] = make([]int, n)
 
- 	}
 
- 	cntAllMines(board, m, n, count)
 
- 	dfs(board, m, n, count, y, x)
 
- 	return board
 
- }
 
- func dfs(board [][]byte, m, n int, count [][]int, y, x int) {
 
- 	if count[y][x] == 0 {
 
- 		board[y][x] = 'B'
 
- 		for dy := -1; dy <= 1; dy++ {
 
- 			for dx := -1; dx <= 1; dx++ {
 
- 				ny, nx := y+dy, x+dx
 
- 				if 0 <= ny && ny < m && 0 <= nx && nx < n && board[ny][nx] == 'E' {
 
- 					dfs(board, m, n, count, ny, nx)
 
- 				}
 
- 			}
 
- 		}
 
- 	} else {
 
- 		board[y][x] = byte(count[y][x] + '0')
 
- 	}
 
- }
 
- func cntAllMines(board [][]byte, m, n int, count [][]int) {
 
- 	for y := 0; y < m; y++ {
 
- 		for x := 0; x < n; x++ {
 
- 			if board[y][x] == 'M' {
 
- 				for dy := -1; dy <= 1; dy++ {
 
- 					for dx := -1; dx <= 1; dx++ {
 
- 						ny, nx := y+dy, x+dx
 
- 						if 0 <= ny && ny < m && 0 <= nx && nx < n {
 
- 							count[ny][nx]++
 
- 						}
 
- 					}
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- }
 
- func updateBoardMLE(board [][]byte, click []int) [][]byte { // BFS, MLE
 
- 	y, x, m, n := click[0], click[1], len(board), len(board[0])
 
- 	if board[y][x] != 'E' {
 
- 		if board[y][x] == 'M' {
 
- 			board[y][x] = 'X'
 
- 		}
 
- 		return board
 
- 	}
 
- 	queue := [][]int{[]int{y, x}}
 
- 	for len(queue) != 0 {
 
- 		y, x = queue[0][0], queue[0][1]
 
- 		queue = queue[1:]
 
- 		cnt := cntMines(board, m, n, y, x)
 
- 		if cnt == 0 {
 
- 			board[y][x] = 'B'
 
- 			for dy := -1; dy <= 1; dy++ {
 
- 				for dx := -1; dx <= 1; dx++ {
 
- 					ny, nx := y+dy, x+dx
 
- 					if 0 <= ny && ny < m && 0 <= nx && nx < n && board[ny][nx] == 'E' {
 
- 						queue = append(queue, []int{ny, nx})
 
- 					}
 
- 				}
 
- 			}
 
- 		} else {
 
- 			board[y][x] = byte(cnt + '0')
 
- 		}
 
- 	}
 
- 	return board
 
- }
 
- func cntMines(board [][]byte, m, n, y, x int) (cnt int) {
 
- 	for dy := -1; dy <= 1; dy++ {
 
- 		for dx := -1; dx <= 1; dx++ {
 
- 			ny, nx := y+dy, x+dx
 
- 			if 0 <= ny && ny < m && 0 <= nx && nx < n && board[ny][nx] == 'M' {
 
- 				cnt++
 
- 			}
 
- 		}
 
- 	}
 
- 	return
 
- }
 
 
  |