题目链接:https://www.lintcode.com/problem/the-maze/description
思路:广度优先搜索,BFS,
起点入队,将该点的flag标记为true,表示已访问
从该点向上滚动,到头后,假如该点是结果点,直接return true,假如该点的flag为false则表示该点未访问,入队,否则不入队,跳过
从该点向下滚动,…
左右同理,
假如BFS找到结果点了就会返回true,假如没找到,则队列到最后会变空,返回false
我的代码耗时较长,100+ms,假如有更快的方法欢迎交流
bool hasPath(vector> &maze, vector &start, vector &destination) { // write your code here int ii = maze.size(); int jj = maze[0].size(); vector > f(ii, vector (jj, false)); int si = start[0]; int sj = start[1]; int di = destination[0]; int dj = destination[1]; queue > q; q.push(pair (si, sj)); while (q.size()) { int i = q.front().first; int j = q.front().second; f[i][j] = true; q.pop(); if (i == di&&j == dj) return true; else { int a = i; int b = j; while (true) { a++; if (a == ii) { a--; if (!f[a][b]) q.push(pair (a, b)); break; } else if (maze[a][b]==1) { a--; if (!f[a][b]) q.push(pair (a, b)); break; } } a = i, b = j; while (true) { a--; if (a <0) { a++; if (!f[a][b]) q.push(pair (a, b)); break; } else if (maze[a][b] == 1) { a++; if (!f[a][b]) q.push(pair (a, b)); break; } } a = i, b = j; while (true) { b++; if (b==jj) { b--; if (!f[a][b]) q.push(pair (a, b)); break; } else if (maze[a][b] == 1) { b--; if (!f[a][b]) q.push(pair (a, b)); break; } } a = i, b = j; while (true) { b--; if (b<0) { b++; if (!f[a][b]) q.push(pair (a, b)); break; } else if (maze[a][b] == 1) { b++; if (!f[a][b]) q.push(pair (a, b)); break; } } } } return false; }



