迷你程序應該打印出迷宮中所有可能的路線,其中入口/出發點總是從左上角向下,所有可能的出口始終在右側壁。它從文本文件中檢索迷宮。C++「迷宮」作業
迷宮實際上只是一堆文本。 迷宮由一個n×n網格組成,由「#」符號組成,這些符號是牆,以及表示可行走區域/路徑的各種字母[a ... z]。字母可以重複,但不能並排。
迷宮是15x15。
大寫字母S總是標記入口,位於第二個最高點的左側牆上。一條可能的路徑只能通過字母 - 你不能在#符號上行走。右側牆上的任何信件都代表退出。
例如,
######
Sa#hln
#bdp##
##e#ko
#gfij#
######
是一種可能的迷宮。在閱讀實際包含迷宮的文本文件後,我的小程序應該打印出所有可能的路線。
調用該程序會產生以下輸出到屏幕上:
Path 1: S,a,b,d,e,f,i,j,k,o
Path 2: S,a,b,d,p,h,l,n
2 total paths
如何我會去這樣做?我不需要一個完整的代碼答案,我只想要一些關於如何解決這個問題的指導。
到目前爲止,除了實際的算法本身,遞歸檢查adajcent方塊以查看是否可以在它們上行走,並且我不知道如何在多個路徑上工作,我已經做了所有事情。
這是我迄今爲止(我知道我的pathcheck是錯的,但我不知道我還能做什麼):
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
#include <cstdio>
using namespace std;
ifstream file("maze.txt");
vector<char> vec(istreambuf_iterator<char>(file), (istreambuf_iterator<char>())); // Imports characters from file
vector<char> path; // Declares path as the vector storing the characters from the file
int x = 18; // Declaring x as 18 so I can use it with recursion below
char entrance = vec.at(16); // 'S', the entrance to the maze
char firstsquare = vec.at(17); // For the first walkable square next to the entrance
vector<char> visited; // Squares that we've walked over already
int main()
{
if (file) {
path.push_back(entrance); // Store 'S', the entrance character, into vector 'path'
path.push_back(firstsquare); // Store the character of the square to the right of the entrance
// into vector 'path'.
while (isalpha(vec.at(x)))
{
path.push_back(vec.at(x));
x++;
}
cout << "Path is: "; // Printing to screen the first part of our statement
// This loop to print to the screen all the contents of the vector 'path'.
for(vector<char>::const_iterator i = path.begin(); i != path.end(); ++i) //
{
std::cout << *i << ' ';
}
cout << endl;
system ("pause"); // Keeps the black box that pops up, open, so we can see results.
return 0;
}
}
謝謝!
你有什麼試過的?您是否陷入瞭解決方案的某些方面?你是否已經完成了基礎知識,比如將文件中的迷宮讀入程序中的數據結構中? –
是否允許使用遞歸函數? –
我會使用遞歸和保存當前狀態的列表,每次遞歸都會爲下一步做4次遞歸調用。在每次遞歸時檢查當前位置是否已被訪問,以及是否爲結束塊。 – bdares