| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 431 人关注过本帖
标题:迷宫问题
取消只看楼主 加入收藏
lhp3774848
Rank: 2
来 自:福建省
等 级:论坛游民
帖 子:46
专家分:77
注 册:2011-5-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
迷宫问题
走迷宫
    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");
}
这个递归函数看不懂,哪位高手帮我详细解释下啊         谢谢!
搜索更多相关主题的帖子: return 元素 
2011-05-19 19:29
lhp3774848
Rank: 2
来 自:福建省
等 级:论坛游民
帖 子:46
专家分:77
注 册:2011-5-3
收藏
得分:0 
谢谢楼上讲得这么详细,虽然还是有点不懂,但回去理解清楚的。
2011-05-20 11:13
快速回复:迷宫问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015786 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved