迷宫问题
[cpp]
//功能:利用递归调用完成迷宫问题的求解
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
//申明迷宫函数
int maze(char **a,int m,int n);
//定义全局变量i,j用来存放迷宫数组的行数和列数
int i,j;
int main()
{
int k;
int m,n;
char **a;//定义指向迷宫数组的二维指针
printf("\n************************************迷宫问题************************************");
printf("\t\t1、输入自己的迷宫\n\t\t2、系统随机产生一个迷宫\n");
scanf("%d",&k);
printf("输入迷宫的行数和列数:");
scanf("%d%d",&i,&j);
getchar();
//动态分配迷宫数组的存储区域
a=(char **)malloc(sizeof(char *)*i);
for(m=0;m<i;m++)
{
a[m]=(char *)malloc(sizeof(char)*j);
}
//输入自己的迷宫数组元素
if(k==1)
{
printf("输入一个迷宫数组,用1表示墙壁,用0表示空白区域\n");
for(m=0;m<i;m++)
{
for(n=0;n<j;n++)
{
a[m][n]=getchar();
}
getchar();
}
printf("你输入的迷宫为:\n");
for(m=0;m<i;m++)
{
for(n=0;n<j;n++)
{
printf(" %c ",a[m][n]);
}
printf("\n");
}
}
//系统初始化一个迷宫数组
else
{
//初始化一个迷宫数组并随机产生墙壁与空白,用1表示墙壁,用0表示空白区域
srand((int)time(0));
for(m=0;m<i;m++)
{
for(n=0;n<j;n++)
{
a[m][n]=rand()%2+'0';
printf(" %c ",a[m][n]);
}
printf("\n");
}
}
if(maze(a,0,0))
{
printf("找到了路径!\n");
for(m=0;m<i;m++)
{
for(n=0;n<j;n++)
{
printf(" %c ",a[m][n]);
}
printf("\n");
}
}
else
{
printf("该迷宫为死迷宫!\n");
}
getch();
return 0;
}
int maze(char **a,int m,int n)
{
int k;
//该条件用于首次判断
if(a[m][n]=='1')
return 0;
a[m][n]='2';
if(m==i-1 && n==j-1 && a[m][n]=='2')
return 1;
//向下走
if(m+1<i && a[m+1][n]=='0')
{
k=maze(a,m+1,n);
if(k==1)
return 1;
}
//向上走
if(m-1>-1 && a[m-1][n]=='0')
{
k=maze(a,m-1,n);
if(k==1)
return 1;
}
//向右走
if(n+1<j && a[m][n+1]=='0')
{
k=maze(a,m,n+1);
if(k==1)
return 1;
}
//向左走
if(n-1>-1 && a[m][n-1]=='0')
{
k=maze(a,m,n-1);
if(k==1)
return 1;
}
a[m][n]='0';
return 0;
}
//功能:利用递归调用完成迷宫问题的求解
#include <stdio.h>
#include <stdlib.h>
#include <c
补充:软件开发 , C++ ,