avatar
Garmin Gps 推荐# PDA - 掌中宝
p*p
1
用checked标记封闭的区域,用markChecked把O变成X
small能过,large挂了,莫非是因为偷懒用dfs造成溢出了?
class Solution {
public:
void solve(vector> &board) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (board.size() <= 1) return;
int rows = board.size();
int cols = board[0].size();
vector> visited(rows, vector(cols, false));
vector> checked(rows, vector(cols, false));

for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
if (!visited[i][j]) {
if (board[i][j] == 'O') {
if (checkIfSurrounded(i, j, board, visited, checked)
) {
markChecked(i, j, board, checked);
}
}
else {
visited[i][j] = true;
}
}
}
}
}

bool checkIfSurrounded(int i, int j, vector> &board,
vector> &visited, vector> &checked) {
if (visited[i][j]) return true;
visited[i][j] = true;
bool left = false, right = false, up = false, down = false;
if (j - 1 >= 0) {
if (board[i][j - 1] == 'X') {
left = true;
}
else {
left = checkIfSurrounded(i, j - 1, board, visited, checked);
}
}

if (j + 1 < board[0].size()) {
if (board[i][j + 1] == 'X') {
right = true;
}
else {
right = checkIfSurrounded(i, j + 1, board, visited, checked);
}
}

if (i - 1 >= 0) {
if (board[i - 1][j] == 'X') {
up = true;
}
else {
up = checkIfSurrounded(i - 1, j, board, visited, checked);
}
}

if (i + 1 < board.size()) {
if (board[i + 1][j] == 'X') {
down = true;
}
else {
down = checkIfSurrounded(i + 1, j, board, visited, checked);
}
}

bool result = left && right && up && down;
if (result) {
checked[i][j] = true;
}

return result;
}

void markChecked(int i, int j, vector> &board,
vector> &checked) {
if (i < 0 || i >= board.size() || j < 0 || j >= board[0].size()) {
return;
}
if (checked[i][j]) {
checked[i][j] = false;
board[i][j] = 'X';
markChecked(i, j - 1, board, checked);
markChecked(i, j + 1, board, checked);
markChecked(i - 1, j, board, checked);
markChecked(i + 1, j, board, checked);
}
}
};
avatar
w*n
2
有一个旧的garmin nuvi 650,大体还行,打算继续用garmin家的。
就是找卫星有时候比较慢 ,而且地图也没有更新。
100左右有什么好的garmin gps推荐?貌似它现在型号很多,具体的区别很大吗?
avatar
p*2
3
用BFS吧。
avatar
j*y
4
感觉可以试试bfs

【在 p*****p 的大作中提到】
: 用checked标记封闭的区域,用markChecked把O变成X
: small能过,large挂了,莫非是因为偷懒用dfs造成溢出了?
: class Solution {
: public:
: void solve(vector> &board) {
: // Start typing your C/C++ solution below
: // DO NOT write int main() function
: if (board.size() <= 1) return;
: int rows = board.size();
: int cols = board[0].size();

avatar
p*p
5
嗯,bfs能过,dfs看来还是递归太深

【在 p*****2 的大作中提到】
: 用BFS吧。
avatar
x*e
6
改bfs吧,我就这么过的。。。
avatar
j*y
7
我试了一下 bfs. 那个 大的 testcase还是过不了阿:
Memory Limit Exceeded
感觉是 bfs的时候用了一个 queue. 你也用 queue了吧, 你的可以过?

【在 p*****p 的大作中提到】
: 嗯,bfs能过,dfs看来还是递归太深
avatar
B*t
8
去掉那个visited就过了

【在 j*****y 的大作中提到】
: 我试了一下 bfs. 那个 大的 testcase还是过不了阿:
: Memory Limit Exceeded
: 感觉是 bfs的时候用了一个 queue. 你也用 queue了吧, 你的可以过?

avatar
p*2
9

你可以看看我的
http://blog.sina.com.cn/s/blog_b9285de20101j1dt.html

【在 j*****y 的大作中提到】
: 我试了一下 bfs. 那个 大的 testcase还是过不了阿:
: Memory Limit Exceeded
: 感觉是 bfs的时候用了一个 queue. 你也用 queue了吧, 你的可以过?

avatar
j*y
10
多谢 :)

【在 B********t 的大作中提到】
: 去掉那个visited就过了
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。