我正在尝试阅读迷宫(来自input.txt
)并解决它。此代码无法正常工作。有什么问题?
void Maze::create(vector<vector<int> >&info)
{
for (int i = 1; (unsigned)i < info.size(); i++)
{
for (int j = 0; (unsigned)j < info[i].size(); j++)
{
if (info[i][j] == wall)
{
map[i - 1][j] = block;
}
else if (info[i][j] == path)
{
map[i - 1][j] == ' ';
}
else if (info[i][j] == start)
{
map[i - 1][j] = 'S';
startingX = (i - 1);
startingY = j;
}
else if (info[i][j] == end)
{
map[i - 1][j] = 'E';
endingX = (i - 1);
endingY = j;
}
else if (info[i][j]>=bonus)
{
map[i - 1][j] = 'B';
}
}
}
print();
cout << endl;
if (solve(startingX, startingY))
{
print();
}
else
{
cout << "DAMN" << endl;
}
}
以上是我读取名为&#34; info&#34;的输入文件的功能。并转换为名为&#34; map&#34;。
的迷宫bool Maze::solve(int a, int b)
{
map[b][a] = road;
cout << "yes"<<endl;
if (a == endingX&&b == endingY)
{
cout << "yes1" << endl;
return true;
}
else if (a > 0 && map[b][a - 1] ==free && solve((a - 1), b))
{
cout << "yes2" << endl;
return true;
}
else if (a < map[0].size() && map[b][a + 1] == free&& solve((a + 1), b))
{
cout << "yes3" << endl;
return true;
}
else if (b > 0 && map[b - 1][a] == free && solve(a, (b - 1)))
{
cout << "yes4" << endl;
return true;
}
else if (b < map.size() && map[b + 1][a] == free && solve(a, (b + 1)))
{
cout << "yes5" << endl;
return true;
}
map[b][a] == free;
//print();
return false;
}
那是我的解决代码。我尝试使用递归方法,但似乎它不起作用,但只是向我展示了起点。
答案 0 :(得分:4)
1)注意不要混淆分配和检查平等:
map[i - 1][j] == ' ';
map[b][a] == free;
因此,map
中没有保存任何数据。相等测试只返回false
并丢弃该布尔值。
2)此外,我没有看到map
,startingX
等的任何声明/初始化。但由于你没有提到编译错误,我想你只是没有复制它们所以。
总之,我打赌你的问题是由第一个问题引起的。
答案 1 :(得分:2)
1)您使用X值作为Maze::create()
中的第一个坐标并调用Maze::solve()
,但作为Maze::solve()
的第二个坐标
2)当你在Maze::solve()
,if (a < map[0].size() && map[b][a + 1] == free&& solve((a + 1), b))
写作时,你可以在a+1
写下a+1 == map[0].size()
; a+1
必须小于