LeetCode刷题实战490:迷宫
示例
解题
class Solution {
public:
bool hasPath(vector<vector<int>>& maze, vector<int>& start, vector<int>& destination) {
if(start==destination){
return true;
}
//变换方向的位置使用2进行标识
maze[start[0]][start[1]]=2;
//使用队列实现广度优先搜索
queue<vector<int>> q;
//压入初始位置
q.push(start);
while(!q.empty()){//终止条件是没有可以判断的位置
//取出当前需要判断的位置
vector<int> tmp=q.front();
q.pop();
//起始位置
//向上方向
int row=tmp[0];
int col=tmp[1];
while(row>=0&&maze[row][col]!=1){//向上
--row;
}
//判断终止位置是否是目的位置
if(row+1==destination[0]&&col==destination[1]){
return true;
}
//若当前终止位置之前没有访问过,则压入队列,并进行标识
if(maze[row+1][col]!=2){
q.push({row+1,col});
maze[row+1][col]=2;
}
//向下方向
row=tmp[0];
while(row1){
++row;
}
if(row-1==destination[0]&&col==destination[1]){
return true;
}
if(maze[row-1][col]!=2){
q.push({row-1,col});
maze[row-1][col]=2;
}
//向左方向
row=tmp[0];
while(col>=0&&maze[row][col]!=1){
--col;
}
if(row==destination[0]&&col+1==destination[1]){
return true;
}
if(maze[row][col+1]!=2){
q.push({row,col+1});
maze[row][col+1]=2;
}
//向右方向
col=tmp[1];
while(col0].size()&&maze[row][col]!=1){
++col;
}
if(row==destination[0]&&col-1==destination[1]){
return true;
}
if(maze[row][col-1]!=2){
q.push({row,col-1});
maze[row][col-1]=2;
}
}
return false;//跳出循环,说明没有找到合适的位置
}
};