1 #include <iostream>
  2 #include<cstdio>
  3 #include<stdlib.h>
  4 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
  5 using namespace std;
  6 #define N 39
  7 #define M 39
  8 int X;
  9 
 10 int maze[N+2][M+2];
 11 struct point{
 12     int row,col,predecessor;
 13 }queue[512];
 14 int head=0,tail=0;
 15 
 16 void shoudong_maze(int m,int n){
 17     int i,j;
 18     printf("\n\n");
 19     printf("请按行输入迷宫 0表示通路1表示障碍:\n\n");
 20     
 21     for(i=0;i<m;i++)
 22         for(j=0;j<n;j++)
 23             scanf("%d",&maze[i][j]);
 24 }
 25 
 26 void zidong_maze(int m,int n){
 27     int i,j;
 28     printf("\n迷宫生成中......\n\n");
 29     system("pause");
 30     for(i=0;i<m;i++)
 31         for(j=0;j<n;j++)
 32             maze[i][j]=rand()%2;
 33     /*由于rand()产生的随机数是从0到RAND_MAX*/
 34     /*RAND_MAX是定义在stdlib.h中的,其值至少为32767)*/
 35     /*要产生从X到Y的数,只需要这样写k=rand()%(Y-X+1)+X;*/
 36 }
 37 
 38 void print_maze(int m,int n){
 39     int i,j;
 40     printf("\n迷宫生成结果如下:\n");
 41     printf("迷宫入口\n");
 42     printf("");
 43     
 44     for(i=0;i<m;i++){
 45         printf("\n");
 46         for(j=0;j<n;j++){
 47             if(maze[i][j]==0) printf("");
 48             if(maze[i][j]==1) printf("");
 49             
 50         }
 51     }
 52     printf("→迷宫出口\n");
 53 } 
 54 
 55 void result_maze(int m,int n){
 56     int i,j;
 57     printf("迷宫通路(用☆表示)如下所示\n\t");
 58     
 59     for(i=0;i<m;i++){
 60         printf("\n");
 61         for(j=0;j<n;j++){
 62             if(maze[i][j]==0||maze[i][j]==2) printf("");
 63             if(maze[i][j]==1) printf("");
 64             if(maze[i][j]==3) printf("");
 65         }
 66     }
 67 }
 68 
 69 void enqueue(struct point p){
 70     queue[tail]=p;
 71     tail++;
 72 }
 73 
 74 struct point dequeue(){
 75     head++;
 76     return queue[head-1];
 77 }
 78 
 79 int is_empty(){
 80     return head==tail;
 81 }
 82 
 83 void visit(int row,int col,int maze[41][41]){
 84     struct point visit_point={row,col,head-1};
 85     maze[row][col]=2;
 86     enqueue(visit_point);
 87 }
 88 
 89 int mgpath(int maze[41][41],int m,int n){
 90     X=1;
 91     struct point p={0,0,-1};
 92     if(maze[p.row][p.col]==1){
 93         printf("\n==============================================\n");
 94         printf("此迷宫无解\n\n");
 95         X=0;
 96         return 0;    
 97     }
 98     maze[p.row][p.col]=2;
 99     enqueue(p);
100     while(!is_empty()){
101         p=dequeue();
102         if((p.row==m-1)&&(p.col==n-1)) break;
103         if((p.col+1<n)&&(maze[p.row][p.col+1]==0)) visit(p.row,p.col+1,maze);
104         if((p.row+1<m)&&(maze[p.row+1][p.col]==0)) visit(p.row+1,p.col,maze);
105         if((p.col-1>=0)&&(maze[p.row][p.col-1]==0)) visit(p.row,p.col-1,maze);
106         if((p.row-1>=0)&&(maze[p.row-1][p.col]==0)) visit(p.row-1,p.col,maze);
107     }
108     if(p.row==m-1&&p.col==n-1)
109     {
110         printf("\n==================================================================\n");
111         printf("迷宫路径为\n");
112         printf("(%d,%d)\n",p.row,p.col);
113         maze[p.row][p.col]=3;
114         while(p.predecessor!=-1)
115         {
116             p=queue[p.predecessor];
117             printf("(%d,%d)\n",p.row,p.col);
118             maze[p.row][p.col]=3;
119         }
120     }else{
121         printf("\n=============================================================\n");
122         printf("此迷宫无解\n\n");
123         X=0;
124     }
125     return 0;
126 }
127 int main(int argc, char** argv) {
128     int i,m,n,cycle=0;
129     while(cycle!=(-1)){
130         printf("********************************************************************************\n");
131         printf("                              欢迎进入迷宫求解系统\n");
132         printf("                                                    \n");
133         
134         printf("********************************************************************************\n");
135         
136         printf("                               ☆手动生成迷宫  请按1\n");
137         
138         printf("                               ☆自动生成迷宫  请按2\n");
139         
140         printf("                               ☆退出          请按3\n\n");
141         
142         printf("********************************************************************************\n");
143         printf("\n");
144         
145         printf("请选择你的操作\n");
146         scanf("%d",&i);
147         
148         switch(i){
149             case 1:    
150                 printf("\n请输入行数");
151                 scanf("%d",&m);
152                 printf("\n");
153                 printf("请输入列数");
154                 scanf("%d",&n);
155                 while((m<=0||m>39)||(n<=0||n>39))
156                 {
157                     printf("\n抱歉你输入的行列数超出预设范围(0-39,0-39),请重新输入\n\n");
158                     printf("请输入行数");
159                     scanf("%d",&m);
160                     printf("\n");
161                     printf("请输入列数");
162                     scanf("%d",&n);
163                 }
164                 shoudong_maze(m,n);
165                 print_maze(m,n);
166                 mgpath(maze,m,n);
167                 if(X!=0) result_maze(m,n);
168                 printf("\n\nPress Enter Contiue!\n");
169                 getchar();
170                 while(getchar()!='\n');
171                 break;
172             case 2:
173                 printf("\n请输入行数");
174                 scanf("%d",&m);
175                 printf("\n");
176                 printf("请输入列数");
177                 scanf("%d",&n);
178                 while((m<=0||m>39)||(n<=0||n>39))
179                 {
180                     printf("\n抱歉你输入的行列数超出预设范围(0-39,0-39),请重新输入\n\n");
181                     printf("请输入行数");
182                     scanf("%d",&m);
183                     printf("\n");
184                     printf("请输入列数");
185                     scanf("%d",&n);
186                 }
187                 zidong_maze(m,n);
188                 print_maze(m,n);
189                 mgpath(maze,m,n);
190                 if(X!=0) result_maze(m,n);
191                 printf("\n\nPress Enter Contiue!\n");
192                 getchar();
193                 while(getchar()!='\n');
194                 break;
195             case 3:
196                 cycle=(-1);
197                 break;
198             default:
199                 printf("\n");
200                 printf("你的输入有误!\n");
201                 printf("\nPress Enter Contiue!\n");
202                 getchar();
203             
204             
205                 while(getchar()!='\n');
206                 break;
207             
208         
209         }
210             
211     }    
212     return 0;
213 }

太牛逼了!