• 203. 迷宫的最短路径(挑战程序设计竞赛)


    地址 https://www.papamelon.com/problem/203

    解答
    BFS的搜索方案是一步步扩展,天生具有搜索最短路径性质。
    我们可以使用宽度优先搜索 BFS进行搜索

    #include <iostream>
    #include <vector>
    #include <queue>
    
    using namespace std;
    
    const int N = 110;
    char arr[N][N];
    int  vis[N][N];
    int n, m;
    
    int addx[4] = { 0,0,1,-1 };
    int addy[4] = { 1,-1,0,0 };
    
    int bfs(int sx, int sy) {
    	queue <vector<int>> q;
    	q.push({ sx,sy,0 });
    	vis[sx][sy] = 1;
    	while (!q.empty()) {
    		int currX = q.front()[0];
    		int currY = q.front()[1];
    		int step = q.front()[2];
    		q.pop();
    		//cout << currX << " " << currY  << " " << step<< endl;
    		for (int i = 0; i < 4; i++) {
    			int x = currX + addx[i];
    			int y = currY + addy[i];
    
    			if (x >= 0 && x < n&&y >= 0 && y < m && vis[x][y] == 0 && arr[x][y] != '#') {
    				if (arr[x][y] == 'G') { 
    					return step+1;
    				}
    				q.push({x,y,step+1});
    				vis[x][y] = 1;
    			}
    		}
    	}
    
    	return -1;
    }
    
    int main() {
    	cin >> n >> m;
    	pair<int, int> start;
    	pair<int, int> end;
    	for (int i = 0; i < n; i++) {
    		for (int j = 0; j < m; j++) {
    			cin >> arr[i][j];
    			if (arr[i][j] == 'S') { start.first = i; start.second = j; }
    		}
    	}
    
    	cout << bfs(start.first, start.second);
    	
    
    	return 0;
    }
    
    

    我的视频题解空间

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    多线程《三》进程与线程的区别
    多线程《二》开启线程的两种方式
    多线程《一》线程理论
    多进程《七》生产者消费者模型
    多进程《六》队列
    互斥锁与join
    多进程《五》互斥锁
    多进程《四》守护进程
    再度认识未来——2.11
    开始——2.10
  • 原文地址:https://www.cnblogs.com/itdef/p/15611679.html
Copyright © 2020-2023  润新知