• 迷宫最短路


    #include<iostream>
    #include<queue>
    #include<cstring>
    #include<cstdio>
    #define MAX 100
    using namespace std;
    const int INF = 10;
    typedef pair<int, int >P;
    int  d[MAX][MAX];
    char imap[MAX][MAX];
    int n, m;
    int sx, sy;
    int gx, gy;
    int To[4][2] = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 } };
    int bfs()
    {
    	for (int i = 0; i < n; i++)
    		for (int j = 0; j < m; j++)
    			d[i][j] = INF;
    	queue<P>que;
    	que.push(P(sx, sy));
    	d[sx][sy] = 0;
    	while (que.size())
    	{
    		P t = que.front(); que.pop();
    		if (t.first == gx&&t.second == gy)break;
    		for (int i = 0; i < 4; i++)
    		{
    			int nx = To[i][0] + t.first;
    			int ny = To[i][1] + t.second;
    			if (nx >= 0 && nx < n&&ny >= 0 && ny < m&&imap[nx][ny] != '#'&&d[nx][ny] ==INF)
    			{
    				que.push(P(nx, ny));
    				d[nx][ny] = d[t.first][t.second] + 1;
    			}
    		}
    	}
    	return d[gx][gy];
    }
    struct node
    {
    	int x;
    	int y;
    	int r;
    	node(int X, int Y, int R) :x(X), y(Y), r(R){};
    	node() :x(0), y(0), r(0){};
    };
    int BFS()
    {
    	memset(d, 0, sizeof(d));
    	queue<node>que;
    	que.push(node(sx, sy, 0));
    	while (que.size())
    	{
    		node t = que.front(); que.pop();
    		d[t.x][t.y] = 1;
    		if (t.x == gx&&t.y == gy)
    			return t.r;
    		for (int i = 0; i < 4; i++)
    		{
    			int nx = To[i][0] + t.x;
    			int ny = To[i][1] + t.y;
    			if (nx >= 0 && nx < n&&ny >= 0 && ny < m&&imap[nx][ny] != '#'&&!d[nx][ny])
    				que.push(node(nx, ny, t.r + 1));
    		}
    	}
    	return INF;
    }
    int main()
    {
    	while (cin >> n >> m)
    	{	
    		int i, j;
    		for (i = 0; i < n; i++)
    			for (j = 0; j < m; j++)
    			{
    				cin >> imap[i][j];
    				if (imap[i][j] == 'S')
    				{
    					sx = i;
    					sy = j;
    				}
    				else if (imap[i][j] == 'G')
    				{
    					gx = i;
    					gy = j;
    				}
    			}
    		cout << "bfs:	" << bfs() << endl;
    		cout << "BFS:	" << BFS() << endl;
    	}
    	return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Chap2: question: 1
    资格赛:题目3:格格取数
    资格赛:题目2:大神与三位小伙伴
    资格赛:题目1:同构
    最大流问题
    webpack(5)配置打包less和sass
    webpack(4)配置打包css
    C++进阶知识点(3)类的静态成员 字符和数字的互转 lambda
    ubuntu shell 监控某个进程占用的资源
    webpack(4)配置打包多个html
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768491.html
Copyright © 2020-2023  润新知