沒下源碼,自己琢磨出來了,有百度左右手算法,算法這東西真難XD...
#include <iostream>
#include <Windows.h>
#include <string>
#include <process.h>
#include <Windows.h>
using namespace std;
/* https://zhidao.baidu.com/question/1755742141667975828.html?
設(shè)定初始面向 East ( 如果是右手抹墻則是 West)
1如果當(dāng)前格為第一排,則說明當(dāng)前格為終點,結(jié)束。
2根據(jù)當(dāng)前格的數(shù)據(jù),找到下一步需要面向的方向, 方法是,如果當(dāng)前方向上有墻,則順時針(右手抹墻則逆時針)轉(zhuǎn)身,重復(fù)這一步驟直到面向的方向上可以行走
3沿當(dāng)前方向走一步
4逆時針(右手抹墻則順時針)轉(zhuǎn)身一次,使當(dāng)前面對方向為第3步之后的左手(或右手)方向, 然后回到步驟1
*/
//墻體和路常量
#define WOLD ?"■"
#define ROLD ?" ?"
//迷宮大小常量
const int X = 8;
const int Y = 8;
//計步器
int count = 0;
//方向枚舉
enum direction{
N = 0,
S = 1,
W = 2,
E = 3
};
//地圖類
class MazeMap {
public:
MazeMap() {}
void coutMap(string map[X][Y]) { //構(gòu)造地圖
for (int i = 0; i < X; i++) {
for (int j = 0; j < Y; j++) {
cout << map[i][j] ;
}
cout << endl;
}
}
};
//人類類
class Human {
public:
Human() :x(6), y(6), man("☆"), direction(W){} //默認(rèn)人初始化為第一個位置
Human(string _man) :x(6), y(6), man(_man), direction(W){} //可以設(shè)置人的標(biāo)識符
//橫縱坐標(biāo)
int x;
int y;
//人物標(biāo)識
string man;
//方向
int direction;
// 移動方法
void humanMove(string map[X][Y], Human *man) {
MazeMap *mazeMap = new MazeMap;
map[man->x][man->y] = man->man;
mazeMap->coutMap(map);
cout << "READY?(Q:y/n)" << endl;
char flag = 'n';
cin >> flag;
//單向?qū)ぢ吩瓌t ?右手抹墻,初始朝向為W
if (flag == 'y') {
do
{
turnBack(map, man);
move(map, man);
Sleep(1000);
system("cls");
mazeMap->coutMap(map);
} while (finsh(man));
cout << "YOU WIN!!!" << endl;
}
else {
cout << "YOU ARE A LOSE!!!" << endl;
}
delete mazeMap;
mazeMap = NULL;
}
//確定方向 如果方向上有墻就逆時針轉(zhuǎn)一下
void turnBack(string map[X][Y],Human *man) {
static int cache = 0;
if (man->direction == N) {
if (map[man->x - 1][man->y] == WOLD) {
man->direction = W;
cache++;
turnBack(map, man);
}
cache = 0;
return;
}
if (man->direction == S) {
if (map[man->x+1][man->y] == WOLD) {
man->direction = E;
cache++;
turnBack(map, man);
}
cache = 0;
return;
}
if (man->direction == W) {
if (map[man->x][man->y-1] == WOLD) {
man->direction = S;
cache++;
turnBack(map, man);
}
cache = 0;
return;
}
if (man->direction == E) {
if (map[man->x][man->y+1] == WOLD) {
man->direction = N;
cache++;
turnBack(map, man);
}
cache = 0;
return;
}
if (cache == 4) {
cache = 0;
return;
}
}
//移動一格 ?后順時針調(diào)轉(zhuǎn)方向
void move(string map[X][Y], Human *man) {
if (man->direction == N) {
man->direction = E;
map[man->x - 1][man->y] = man->man;
map[man->x][man->y] = ROLD;
man->x -= 1;
}else if (man->direction == S) {
man->direction = W;
map[man->x + 1][man->y] = man->man;
map[man->x][man->y] = ROLD;
man->x += 1;
}else if (man->direction == W) {
man->direction = N;
map[man->x][man->y - 1] = man->man;
map[man->x][man->y] = ROLD;
man->y -= 1;
}else if(man->direction == E) {
man->direction = S;
map[man->x][man->y + 1] = man->man;
map[man->x][man->y] = ROLD;
man->y += 1;
}
return;
}
//判斷是否完成
bool finsh(Human *man) {
if (man->x == 0)
return false;
return true;
}
};
int main(void) {
string map[X][Y] = { {WOLD,ROLD,WOLD,WOLD,WOLD,WOLD,WOLD,WOLD},
{WOLD,ROLD,ROLD,ROLD,ROLD,ROLD,WOLD,WOLD},
{WOLD,WOLD,WOLD,WOLD,WOLD,ROLD,ROLD,WOLD},
{WOLD,ROLD,ROLD,ROLD,ROLD,ROLD,WOLD,WOLD},
{WOLD,WOLD,ROLD,WOLD,ROLD,ROLD,WOLD,WOLD},
{WOLD,WOLD,ROLD,ROLD,ROLD,WOLD,WOLD,WOLD},
{WOLD,WOLD,WOLD,WOLD,ROLD,ROLD,ROLD,WOLD},
{WOLD,WOLD,WOLD,WOLD,WOLD,WOLD,WOLD,WOLD} };
Human *man = new Human("⊙");
man->humanMove(map,man);
delete man;
man = NULL;
return 0;
}
2019-02-17
//確定方向 如果方向上有墻就逆時針轉(zhuǎn)一下
void turnBack(string map[X][Y], Human *man) {
static int cache = 0;
if (man->direction == N) {
if (map[man->x - 1][man->y] == WALL) {
man->direction = W;
cache++;
turnBack(map, man);
}
cache = 0;
return;
}
if (man->direction == S) {
if (map[man->x + 1][man->y] == WALL) {
man->direction = E;
cache++;
turnBack(map, man);
}
cache = 0;
return;
}
if (man->direction == W) {
if (map[man->x][man->y - 1] == WALL) {
man->direction = S;
cache++;
turnBack(map, man);
}
cache = 0;
return;
}
if (man->direction == E) {
if (map[man->x][man->y + 1] == WALL) {
man->direction = N;
cache++;
turnBack(map, man);
}
cache = 0;
return;
}
if (cache == 4) {
cache = 0;
return;
}
}
可以問一下,這個cache的作用是什么嗎?沒看懂???
2019-10-22
process.h這個頭文件是干嘛的呀大佬?
2019-02-16
感謝大佬
2018-11-22
聽說算法和數(shù)據(jù)結(jié)構(gòu)是很重要的XD...,歡迎大家指出不足XD...