⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maze.cpp

📁 建立輸入文檔,輸出迷宮路線和迷宮的形象圖 (有實例)
💻 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 + -