c++书中的一个代码有一些理解不来,求大家帮忙一把!

yiruirui0507 2010-11-07 09:20:43
#include <vector>
#include <iostream>
using namespace std;

// 把迷宫表示为n个有编码路口的集合
// 定义路口类
class Crossing
{
public:
// 0为不通 路口的三个方向
int turn1;
int turn2;
int turn3;

public:
Crossing(int turn1, int turn2, int turn3)
{
Crossing::turn1 = turn1;
Crossing::turn2 = turn2;
Crossing::turn3 = turn3;
}
};

// 定义迷宫类
class Maze
{
private:
int exit; //出口编码
vector<Crossing> crossings; //路口集合
vector<int> result;

public:
Maze(int the_exit, vector<Crossing> the_crossings)
{
exit = the_exit;
crossings = the_crossings;
}
int findExit(int entrance); //迷宫求解
void getResult(); //取得迷宫解并打印

};

//迷宫求解核心算法
int Maze::findExit(int entrance)
{
if(entrance > 0)
{
if(entrance == Maze::exit)
{
result.push_back(entrance);
return 1;
}
if(findExit(crossings[entrance].turn1))
{
result.push_back(entrance);
return 1;
}
if(findExit(crossings[entrance].turn2))
{
result.push_back(entrance);
return 1;
}
if(findExit(crossings[entrance].turn3))
{
result.push_back(entrance);
return 1;
}
}

return 0;
}

void Maze::getResult()
{
findExit(1);

for(int i = result.size(); i>0; i--)
cout << result[i-1] << "->";
cout << "Exit" << endl;
}

void main()
{
// 创建一个迷宫 9个路口 出口为10
Crossing c1(2,0,0);
Crossing c2(4,0,0);
Crossing c3(0,0,0);
Crossing c4(3,5,0);
Crossing c5(6,0,0);
Crossing c6(7,0,0);
Crossing c7(8,9,0);
Crossing c8(0,0,0);
Crossing c9(10,0,0);
Crossing c0(0,0,0);

vector<Crossing> crossings;
crossings.push_back(c0);
crossings.push_back(c1);
crossings.push_back(c2);
crossings.push_back(c3);
crossings.push_back(c4);
crossings.push_back(c5);
crossings.push_back(c6);
crossings.push_back(c7);
crossings.push_back(c8);
crossings.push_back(c9);

Maze newMaze(10, crossings);
newMaze.getResult();

return;
}

一个迷宫求解问题,代码没任何问题,对其中的一些理解不了。先附上图片吧,自己画的,别见怪,有图容易说明问题。
...全文
148 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiruirui0507 2010-11-07
  • 打赏
  • 举报
回复

每个路口定义了三个“方向”,这个方向并非什么前后左右,而是和他相连的三个结点,

比如C1(2,0,0)就是表示第一个节点仅和标记为2的结点相连。C2(4,0,0)表示2结点就和4相连,C7(8,9,0)表示7结点和8,9都相连。明白了吗??迷宫的标记方式可以有很多,我采用的就是比较简单的链式标记法。

希望我的书能够令你有所收获。


以上是书的作者给我的回复!
yiruirui0507 2010-11-07
  • 打赏
  • 举报
回复
貌似跟这个没任何关系,Crossing c1(2,0,0);
仅仅是说可以从路口1到路口2吧,至于哪个方向毫无关系,因为我把顺序变了,编译得出的结果一模一样!
willabc 2010-11-07
  • 打赏
  • 举报
回复
等待高手解释!
lazycat_work 2010-11-07
  • 打赏
  • 举报
回复
同问,关注
yiruirui0507 2010-11-07
  • 打赏
  • 举报
回复
class Crossing
{
public:
// 0为不通 路口的三个方向
int turn1;
int turn2;
int turn3;

public:
Crossing(int turn1, int turn2, int turn3)
{
Crossing::turn1 = turn1;
Crossing::turn2 = turn2;
Crossing::turn3 = turn3;
}
};
已经说明是3个方向了
问题就是这三个方向哪个是 前?左?右?
就是这里整理不顺!
yiruirui0507 2010-11-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qq120848369 的回复:]
看楼主的意思是深搜,但是我不喜欢这种写法,太烂了.
[/Quote]

暂且不谈论喜欢与否,先帮我把代码看懂吧?
yiruirui0507 2010-11-07
  • 打赏
  • 举报
回复
貌似图片显示不出来啊?
给出图片的公网地址吧。
http://hi.csdn.net/space-4195568-do-album-picid-477554-goto-down.html

Crossing c1(2,0,0);
Crossing c2(4,0,0);
Crossing c3(0,0,0);
Crossing c4(3,5,0);
Crossing c5(6,0,0);
Crossing c6(7,0,0);
Crossing c7(8,9,0);
Crossing c8(0,0,0);
Crossing c9(10,0,0);
Crossing c0(0,0,0);

这些数字该如何理解啊?我总是认为向右,向上,向左,但是这样又不对,大家帮看看这里如何理解!
qq120848369 2010-11-07
  • 打赏
  • 举报
回复
看楼主的意思是深搜,但是我不喜欢这种写法,太烂了.

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧