虽然结果出来了,但是为什么有很多是重复的?
程序代码:
#include"iostream" using namespace std; #define size 3 int maze[size+2][size+2]; void creat(){ //创建迷宫 int i,j; for(i=0;i<=size+1;i++) for(j=0;j<=size+1;j++) maze[i][j]=0; i=0; for(j=0;j<=size+1;j++) maze[i][j]=1; i=size+1; for(j=0;j<=size+1;j++) maze[i][j]=1; j=0; for(i=0;i<=size+1;i++) maze[i][j]=1; j=size+1; for(i=0;i<=size+1;i++) maze[i][j]=1; }void set_m(){ //给迷宫设置障碍物,1表示有障碍物,0表示没有 maze[1][2] = 1; maze[3][3]=1; } void show(){ int i,j; for(i=0;i<=size+1;i++){ //输出迷宫 for(j=0;j<=size+1;j++){ if(maze[i][j]==-1)cout<<"*"<<" "; if(maze[i][j]==1)cout<<"#"<<" "; if(maze[i][j]==0)cout<<" "; } cout<<endl; } } void search_m(int i,int j){ //查找路径,出口点在2,3.入口点在1,1 if(i==2&&j==3){maze[i][j]=-1;int static k=1;cout<<"第"<<k<<"种:\n";show();k++;return;} if(maze[i][j]==-1||maze[i][j]==1)return; //maze[i][j]表示改点曾经走过。 maze[i][j]=-1; search_m(i-1,j); search_m(i,j+1); search_m(i+1,j); search_m(i,j+1); maze[i][j]=0; } int main(){ creat(); set_m(); show(); search_m(1,1); return 0; }