Problem : 走迷宫

Problem : 走迷宫

Description
小明与许多同学一起参加了今年的“信息与未来”小学生夏令营活动。夏令营的组织者设计安排了许多有趣的活动
,走迷宫就是其中的一项。迷宫由N*N个方格组成,每个方格均被组织者事先标上了“0”或“1”(左上角第一个
方格和右下角最后一个方格一定是“0”)。当你进入左上角的第一个方格中时,看到相邻的方格是“0”时则可以
进入,而如果是“1”时则表示此路不通。小明被告之:从迷宫的左上角第一个方格的入口处准备进入时,你可得
到一个记有N*N分值的记分标,每经过一个标有“0”的方格,记分表将自动扣去1分,当走到右下角最后一个方格
的出口处时,将显示你手中的记分表剩余的分值。夏令营的组织者将只奖励所有参加此项活动中,记分表剩余的分
值最多的营员。
Input
第一行是一个整数N(3<=N<=40),接下来有N行,每行均有N个由0和1组成的数据。
Output
一个整数(记分表剩余的分值)
Sample Input
4
0011
1000
0001
1000
Sample Output
9

#include<bits/stdc++.h>
using namespace std;
int n,c=1,e[10000],f[10000],d,a[41][41],xx[4]={-1,1,0,0},yy[4]={0,0,1,-1}; 
void dfs(int aa,int bb)
{
    d++;
    if(aa+bb==2*n)
    {
    cout<<n*n-a[aa][bb];
    exit(0);
    }
    for(int i=0;i<4;i++)
    if(aa+xx[i]>0&&aa+xx[i]<=n&&bb+yy[i]>0&&bb+yy[i]<=n
    &&!a[aa+xx[i]][bb+yy[i]])
    {
        c++;
        a[aa+xx[i]][bb+yy[i]]=a[aa][bb]+1;
        e[c]=aa+xx[i];f[c]=bb+yy[i];
    }
    dfs(e[d+1],f[d+1]);
}
main() 
{
    cin>>n;char aaa;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
    cin>>aaa;a[i][j]=aaa-'0';
    }
    a[1][1]=1;
    dfs(1,1); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值