`

BFS——最小步数 续

 
阅读更多

上一次用的DFS,这次BFS,直接在地图上扩展结点,如下图所示:


橙黄色代表起点,浅蓝色终点。

#include <cstdio>
#include <queue>

using namespace std;

#define ACCESS      0

struct position
{
	int x, y;
}start, end;

const int direction[4][2] = {-1, 0, 0, 1, 1, 0, 0, -1};

queue<position> toExpandPosition;

void BFSExploreMaze(int &minStep)
{
	int i;
	int mazeMap[9][9] =
	{
		1,1,1,1,1,1,1,1,1,
		1,0,0,1,0,0,1,0,1,
		1,0,0,1,1,0,0,0,1,
		1,0,1,0,1,1,0,1,1,
		1,0,0,0,0,1,0,0,1,
		1,1,0,1,0,1,0,0,1,
		1,1,0,1,0,1,0,0,1,
		1,1,0,1,0,0,0,0,1,
		1,1,1,1,1,1,1,1,1
	};
	position currentPos, adjacentPos;
	while (!toExpandPosition.empty())
	{
		toExpandPosition.pop();
	}
	toExpandPosition.push(start);

	while (!toExpandPosition.empty())
	{
		currentPos = toExpandPosition.front();
		toExpandPosition.pop();
		if (currentPos.x == end.x && currentPos.y == end.y)
		{
			minStep = mazeMap[currentPos.x][currentPos.y];
			return;
		}
		for (i = 0; i < 4; i++)
		{
			adjacentPos.x = currentPos.x + direction[i][0];
			adjacentPos.y = currentPos.y + direction[i][1];
			if (mazeMap[adjacentPos.x][adjacentPos.y] == ACCESS)
			{
				mazeMap[adjacentPos.x][adjacentPos.y] =
					mazeMap[currentPos.x][currentPos.y] + 1;
				toExpandPosition.push(adjacentPos);
			}
		}
	}
}

int main()
{
	int testNum, minStep;
	scanf("%d", &testNum);
	while (testNum-- != 0)
	{
		scanf("%d%d%d%d", &start.x, &start.y, &end.x, &end.y);
		BFSExploreMaze(minStep);
		printf("%d\n", minStep);
	}
	return 0;
}


分享到:
评论

相关推荐

    数据结构、算法与应用:C++语言描述(原书第2版)第二部分

    2.3.4 步数 第3章 渐近记法 3.1 引言 3.2 渐近记法 3.2.1 大Ο记法 3.2.2 渐近记法Ω和Θ 3.3 渐近数学(可选) 3.3.1 大O记法 3.3.2 Ω记法 3.3.3 Θ记法 3.3.4 小ο记法 3.3.5 特性 3.4 复杂度分析举例 3.5 实际...

    数据结构与算法:C++描述

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构算法与应用-C__语言描述

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构算法与应用-C++语言描述

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    用c描述的数据结构演示软件

    右侧下窗口为递归工作栈,栈中每个记录含6个数据项,其中 adr 指示调用语句行号,k 指示步数,(x,y) 表示当前坐标,i 指示路径方向(起始方向为 1,顺时针方向旋转搜索)。 5. 皇后问题 左侧图示窗口包含棋盘和...

    C++语言描述(PDF合集)

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构演示软件

    右侧下窗口为递归工作栈,栈中每个记录含6个数据项,其中 adr 指示调用语句行号,k 指示步数,(x,y) 表示当前坐标,i 指示路径方向(起始方向为 1,顺时针方向旋转搜索)。 5. 皇后问题 左侧图示窗口包含棋盘和...

    数据结构算法与应用(C++语言描述).rar

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构C++描述

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构 C++描述

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构、算法与应用--C++语言描述

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构(C语言描述)

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构算法与应用-C C++语言描述

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 2.6.1 选择...

    数据结构算法与应用-C++语言描述.rar

    2.3.3 执行步数 44 2.4 渐进符号(O、 健?、 o) 55 2.4.1 大写O符号 56 2.4.2 椒?58 2.4.3 符号 59 2.4.4 小写o符号 60 2.4.5 特性 60 2.4.6 复杂性分析举例 61 2.5 实际复杂性 66 2.6 性能测量 68 ...

    数据结构算法与应用 很详细的,数据结构算法全集 这个是你想找的

    程序性能 30 2.1 引言 30 2.2 空间复杂性 31 2.2.1 空间复杂性的组成 31 2.2.2 举例 35 2.3 时间复杂性 37 2.3.1 时间复杂性的组成 37 2.3.2 操作计数 37 2.3.3 执行步数 44 2.4 渐进...

Global site tag (gtag.js) - Google Analytics