给出啊哈磊的《啊哈!算法》一书中第四章第二节示例“解救小哈”的 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: