ミニプログラムは、迷路を通るすべての可能なルートを印刷することになっています。ここで、入口/開始点は常に左上隅から1つ下にあり、すべての可能な出口は常に右の壁にあります。テキストファイルから迷路を取得します。
迷路は実際には単なるテキストの集まりです。迷路は、壁である「#」記号で構成されるnxnグリッドと、歩行可能な領域/パスを表すさまざまな文字[a...z]で構成されます。文字は繰り返すことができますが、並べることはできません。
迷路は15x15です。
大文字のSは常に入り口にラベルを付け、2番目に高い場所の左側の壁にあります。可能なパスは文字のみです-#記号の上を歩くことはできません。右側の壁にある文字はすべて出口を表しています。
例えば、
######
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
これをやってみませんか?完全なコードの答えは必要ありません。この問題に取り組む方法についてのガイダンスが必要です。
これまでのところ、隣接する正方形を再帰的にチェックしてそれらの上を歩くことができるかどうかを確認する実際のアルゴリズム自体を除いて、すべてを実行しました。複数のパスでどのように作業するかわかりません。
これは私がこれまでに持っているものです(パスチェックが間違っていることは知っていますが、他に何をすべきかわかりませんでした):
#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;
}
}
ありがとう!