2013-12-03 9 views
0

Итак, я работаю над кодом, который должен решить лабиринт, который должен быть задан в .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; 
} 

Так где же ошибка?

+0

Функции 'Push' и' Pop' никогда не называются. Можете ли вы сделать это на минимальном примере? http://sscce.org/ – Chowlett

+0

Сэр, этот код еще не закончен, у меня были другие входы, которые действительны, и я должен отслеживать их, чтобы получить правильный путь в стеке и функции push() и pop(). Точка, я хотел проверить код, указав ему первую недействительную координату «, которая лежит на границе» и посмотреть, работает ли она, а затем завершить ее и увидеть, когда «Вход действителен», затем я использую стек с его функции. – Cereal

+0

Достаточно честный; но это усложняет нас - и вы! - найти проблему, если есть дополнительный код, загромождающий пример. Хуже того, ваш комментарий ниже показывает, что вы не вставляли код _actual_ и образцы данных, которые вы используете. Мы будем намного эффективнее, если вы можете предоставить минимальный пример, который действительно соответствует тому, что у вас есть. – Chowlett

ответ

1

Массивы в C++ являются 0-индексированными - то есть Maze[1][2] является ячейкой во второй строке, третьем столбце. Либо введите свою входную ячейку, как во входном файле, либо вычтите 1 из каждой кодовой части кода.

Кроме того, при разборе самого лабиринта вы, кажется, не считаете запятыми.

+0

Что касается координаты, я принял во внимание, что они индексируются 0, и на самом деле решение, которое мне дано, является правильным, оно должно быть недействительным. Да, я не принимал запятые в учетной записи, потому что лабиринт должен быть заполнен целыми числами, 1 или 0, поэтому я попытался прочитать «z», чтобы получить целые числа и игнорировать запятые. Я не уверен, как я заполнил динамическую матрицу, поэтому, если вы все равно можете помочь мне правильно заполнить ее, пожалуйста, скажите мне. – Cereal

Смежные вопросы