Итак, я работаю над кодом, который должен решить лабиринт, который должен быть задан в .txt-файле, скажем, «input.txt», где 1 = блоки и 0 = открытые пути в образуют так:Решение лабиринта с .txt с использованием C++
Maze1
7,6 //Number of rows and columns of the maze: row,column
1,1,1,1,1,1
1,0,1,1,0,1
1,0,0,0,0,1
1,0,1,1,0,0
1,0,1,1,0,1
1,1,0,0,1,1
1,1,1,1,1,1
1 // number of entrances
1,2 // coordinate of an entrance relative to the origin: row, column
так что у меня есть какой-то алгоритм в моем уме, но скажем, «первое» вход недопустим ...
поэтому выход должен быть таким:
Maze1
Entrance: 1,2 Invalid
И это должно быть напечатано в другом .t xt, скажем, «Output.txt» .... но он на самом деле не дает мне никаких синтаксических ошибок, но он ничего не пишет в Output.txt ...
Anyways вот мой «Неполный код». .. поэтому, пожалуйста, помогите мне:
#include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct Stack
{
int data[30]; //X should be constant
int top;
}; //Stack
void Push(int a,Stack &S)
{
S.top++;
if (S.top>=30) //Remember X should be constant
{
cout<<"The stack is full!"<<endl;
S.top--;
return;
}
else
{
S.data[S.top]=a;
}
} //Push
int Pop(Stack &S)
{
if (S.top==-1)
{
cout<<"The stack is empty!"<<endl;
return 0;
}
else
{
int Temp=S.data[S.top];
S.data[S.top]=NULL;
S.top--;
return Temp;
}
} //Pop
int main()
{
#define false 1;
#define true 0;
string line;
Stack s1 = { NULL, -1 }, s2 = { NULL, -1 };
int x, y; //Dimensions of Matrix.
int z; //Element Location in Matrix.
int a; //Number of Entrance Points.
int b, c; //Coordinates of Entrance Points.
char ch; //Comma indication.
ifstream input ("Input.txt"); //Using relative addresses.
ofstream output ("Output.txt");
input>>line;
cout<<"Solution for "<<line<<" : \n \n \n";
input>>x>>ch>>y; //Reading the Dimensions of the Matrix.
cout<<line<<" coordinates are "<<x<<ch<<y<<endl<<endl<<endl;
int **Maze = new int *[x]; //Creating Dynamic Matrix.
for (int i=0; i<x; i++)
{
Maze[i]= new int [y];
}
for (int i=0; i<x; i++) //Filling the Maze from the .txt
{
for (int j=0; j<y; j++)
{
input>>z;
Maze[i][j]=z;
}
}
input>>a; //Reading the number of entrances.
for(int i=0; i<a; i++)
{
input>>b>>ch>>c; //Reading the entrance coordinates.
if (Maze[b][c]==1 || b>7 || c>6) //Checking for the validity of entrance point.
{
cout<<"Entrance: "<<b<<ch<<c<<" is Invalid! \n";
output<<"Entrance: "<<b<<ch<<c<<" is Invalid! \n";// WRITE ENTRANCE IS INVALID IN OUTPUT FILE
}
}
output.close();
input.close();
for(int i=0; i<x; i++) //Deleting Maze
{
delete[] Maze[i];
}
delete[] Maze;
return 0;
}
Так где же ошибка?
Функции 'Push' и' Pop' никогда не называются. Можете ли вы сделать это на минимальном примере? http://sscce.org/ – Chowlett
Сэр, этот код еще не закончен, у меня были другие входы, которые действительны, и я должен отслеживать их, чтобы получить правильный путь в стеке и функции push() и pop(). Точка, я хотел проверить код, указав ему первую недействительную координату «, которая лежит на границе» и посмотреть, работает ли она, а затем завершить ее и увидеть, когда «Вход действителен», затем я использую стек с его функции. – Cereal
Достаточно честный; но это усложняет нас - и вы! - найти проблему, если есть дополнительный код, загромождающий пример. Хуже того, ваш комментарий ниже показывает, что вы не вставляли код _actual_ и образцы данных, которые вы используете. Мы будем намного эффективнее, если вы можете предоставить минимальный пример, который действительно соответствует тому, что у вас есть. – Chowlett