資源簡介
問題描述: 羅密歐與朱麗葉的迷宮。羅密歐與朱麗葉身處一個m×n的迷宮中,如圖所示。每一個方格表示迷宮中的一個房間。這m×n個房間中有一些房間是封閉的,不允許任何人進入。在迷宮中任何位置均可沿8 個方向進入未封閉的房間。羅密歐位于迷宮的(p,q)方格中,他必須找出一條通向朱麗葉所在的(r,s)方格的路。在抵達朱麗葉之前,他必須走遍所有未封閉的房間各一次,而且要使到達朱麗葉的轉彎次數為最少。每改變一次前進方向算作轉彎一次。請設計一個算法幫助羅密歐找出這樣一條道路。 編程任務: 對于給定的羅密歐與朱麗葉的迷宮,編程計算羅密歐通向朱麗葉的所有最少轉彎道路。
代碼片段和文件信息
#include?
#include?
using?namespace?std;
class?CMaze
{
public:
CMaze(int?n?int?m);
void?ReadData(ifstream&?fileIn);
void?OutPut(ofstream&?fileOut);
int?GetP();
int?GetQ();
bool?CanPast(int?r?int?l);
void?Search(int?curTurn?int?curStep?int?curDir?int?posX?int?posY);
~CMaze();
private:
int?n;
int?m;
int?k;
int**?maze;
int**?path;
int?p?q;
int?r?s;
int?ans;
int?ans_num;
};
int dir[9][2]?=?{{0?0}?{-1?0}?{1?0}?{0?-1}?{0?1}?{-1?-1}?{-1?1}?{1?-1}?{1?1}};
CMaze::CMaze(int?n?int?m)
{
this->m?=?m;
this->n?=?n;
maze?=?new?int*[n];
for(int?i?=?0;?i? path?=?new?int*[n];
for(i?=?0;?i? for(i?=?0;?i? {
for(int?j?=?0;?j? {
maze[i][j]?=?path[i][j]?=?0;
}
}
ans?=?this->n?*?this->m;
ans_num?=?0;
}
CMaze::~CMaze()
{
for(int?i?=?0;?i? delete[]?maze;
}
void?C
- 上一篇:VC6 多tab頁顯示插件
- 下一篇:C語言計算圖片直方圖
評論
共有 條評論