迷宫问题
走迷宫n*n的矩阵,每个元素表示一个格子,取值为0或1,取0表示该格不能走,取1表示可以走。已知矩阵,(其中a[1][1]与a[n][n]取值必为1)。问从a[1][1]到a[n][n]至少要经过几个格(包括首尾两格)。输入第一行为n
第二行到第n+1行,每行n个无素
输出:格子数。
输入样例:
3
1 0 1
1 0 0
1 1 1
输出:5
以下是代码:
#include "stdio.h"
#include "stdlib.h"
int a[100][100];
int mark[100][100];
int f(int m,int n)
{
int t,min;
if(m==1&&n==1)return 1;
a[m][n]=0;
if(mark[m][n]>=1)return mark[m][n];
min=10000;
if(a[m-1][n]==1)
{
t=f(m-1,n)+1;
if(min>t)min=t;
a[m-1][n]=1;
}
if(a[m+1][n]==1)
{
t=f(m+1,n)+1;
if(min>t)min=t;
a[m+1][n]=1;
}
if(a[m][n+1]==1)
{
t=f(m,n+1)+1;
if(min>t)min=t;
a[m][n+1]=1;
}
if(a[m][n-1]==1)
{
t=f(m,n-1)+1;
if(min>t)min=t;
a[m][n-1]=1;
}
mark[m][n]=min;
return min;
}
int main ()
{
int n,i,j;
scanf("%d",&n);
for(i=0;i<=n+1;i++)
{
a[i][0]=0;
a[0][i]=0;
a[i][n+1]=0;
a[n+1][i]=0;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
mark[i][j]=0;
}
printf("%d",f(n,n));
system("pause");
}
这个递归函数看不懂,哪位高手帮我详细解释下啊 谢谢!