📄 maze.cpp
字号:
#include <iostream>
using namespace std;
#include <cstdlib>
#include <fstream>
#include "Array.h"
#include "Node.h"
#include "Stack.h"
void print_path(Stack<Array> print,ofstream& output)
/*Print the path of the Maze.*/
{
Array temp_pos;
Stack<Array> temp;
while(!print.empty()){
print.top(temp_pos);
temp.push(temp_pos);
print.pop();
}
output<<endl;
while(!temp.empty()){
temp.top(temp_pos);
output<<"("<<temp_pos.Array_X<<","<<temp_pos.Array_Y<<")->";
temp.pop();
}
output<<"Eixt!"<<endl;
return;
}
void DelMaze(int** &Maze,int M)
{
for(int i=0;i<M;i++) delete []Maze[i];
delete []Maze;
}
void Maze_change(int **Maze,int **MazeChange,int M,int N)
{
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
{
if(i==0||j==0||i==M-1||j==N-1) MazeChange[i][j]=1;
else MazeChange[i][j]=Maze[i-1][j-1];
}
return ;
}
int maze_next(int m,int n,ofstream& output,Stack<Array> &outcome,int **Maze,int M,int N)
{
static int TotalNum=0;
if(Maze[m][n]==0){
Maze[m][n]=1;
Array maze(m,n);
outcome.push(maze);
if(m==M-2&&n==N-2){
TotalNum++;
output<<"Case "<<TotalNum<<": ";
print_path(outcome,output);
}
else {
maze_next(m,n+1,output,outcome,Maze,M,N);
maze_next(m,n-1,output,outcome,Maze,M,N);
maze_next(m-1,n,output,outcome,Maze,M,N);
maze_next(m+1,n,output,outcome,Maze,M,N);
}
outcome.pop();
Maze[m][n]=0;
}
return TotalNum;
}
void initialization(ifstream& input,const char* Maze_init,ofstream& output,const char* Maze_path,int ** &Maze,int & M,int & N)
{
input.open(Maze_init);
if(!input){
cout<<"Can not open "<<Maze_init<<endl;
exit(0);
}
input>>M>>N;
int signal;
Maze=new int*[M]; //動態申請二維數組
for(int i = 0; i < M; ++i) Maze[i] = new int[N];
for(int i=0;i<M;i++)
for(int j=0;j<N;j++){
input>>signal;
Maze[i][j]=signal;
}
input.close();
output.open(Maze_path);
if(!output){
cout<<"Can not open "<<Maze_path<<endl;
exit(0);
}
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
if(Maze[i][j]==1) output<<"■";
else output<<"□";
}
output<<endl;
}
return;
}
int main()
{
const char* Maze_init="Maze_initialization.txt";
const char* Maze_path="Maze_path.txt";
int M,N;int TotalNumber;
int **Maze,**MazeChange;
Array print;
Stack<Array> outcome;
ifstream input;
ofstream output;
initialization(input,Maze_init,output,Maze_path,Maze,M,N);
M=M+2;N=N+2;
MazeChange=new int*[M]; //申請動態二維數組
for(int i=0;i<M;i++) MazeChange[i]=new int[N];
Maze_change(Maze,MazeChange,M,N);
DelMaze(Maze,M-2);
if(MazeChange[1][1]==1) TotalNumber=0;
else TotalNumber=maze_next(1,1,output,outcome,MazeChange,M,N);
output<<endl<<"The Total Number of Path is "<<TotalNumber;
output.close();
DelMaze(MazeChange,M);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -