深度优先算法:《啊哈!算法》一书中第四章“解救小哈”例子的 C++ 语言实现

这篇博客详细介绍了如何使用 C++ 实现《啊哈!算法》第四章中解救小哈的深度优先搜索算法。通过 MapClass、PositionClass 头文件和源文件,以及 main.cpp 和 Makefile,博主提供了完整的代码示例,利用类的成员函数完成路径查找功能。输入地图数据存于 map.txt 文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        给出啊哈磊的《啊哈!算法》一书中第四章第二节示例“解救小哈”的 C++ 语言实现。代码如下:

------------------------------------------------------ 文件:MapClass.h ------------------------------------------------------

/*
 * 地图类的定义 
*/

#ifndef CLASS_MAP_H
#define CLASS_MAP_H

#include <iostream>

class map_data {
public:
	//无默认构造函数,强制要求带参数的构造函数
	map_data(int, int);
	//因为有指针成员,所以需要定义析构函数
	~map_data();
	//读取地图数据
	void create(std::istream&);
	//赋予友元关系
	friend class Position;
private:
	int height; //地图的高,也就是行数
	int width; //地图的宽,也就是列数
	int **map_info; //存储地图的二维数组。约定 0 表示空地,1 表示不能走的位置
	int **book; //标记某个位置是否已经走过,0 表示还未走过,1 表示已经走过
	//设定某位置的走过标记
	void setMapBooked(int, int);
};

#endif 

------------------------------------------------------ 文件:MapClass.cpp ------------------------------------------------------

/*
 * 地图类的实现
*/

#include "MapClass.h"

//带参数的构造函数
map_data::map_data(int hVal, int wVal) : height(hVal), width(wVal)
{
	map_info = new int *[height];
	book = new int *[height];
	for(int ix = 0; ix != height; ++ix)
	{
		map_info[ix] = new int [width];
		book[ix] = new int [width];
	}
	for(int i = 0; i != height; ++i)
	{
		for(int j = 0; j != width; ++j)
		{
			map_info[i][j] = 0;
			book[i][j] = 0;
		}
	}
}

//因为有指针成员,所以需要定义析构函数
map_data::~map_data()
{
	for(int ix = 0; ix != height; ++ix)
	{
		delete [] map_info[ix];
		delete [] book[ix];
	}
	delete [] map_info;
	delete [] book;
}

//成员函数,用于读取输入的地图数据 
void map_data::create(std::istream& in_data)
{
	int ival;
	for(int i = 0; i != height; ++i)
	{
		for(int j = 0; j != width; ++j)
		{
			if(in_data >> ival) map_info[i][j] = ival;
		}
	}
}

//设定某位置的走过标记
void map_data:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值