问题标题: 酷町堂:求大神看看1051 迷宫问题那错了!

0
0
已解决
王梓澳
王梓澳
中级光能
中级光能

题目:

1051   迷宫问题

题目描述 Description

设有一个N*N(2<=n<10)方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放0和1,0表示可通,1表示不能通过,入口和出口处肯定是0.迷宫走的规则如下所示:即从某点开始,有八个方向可走,前进方格中数字为0时表示可通过,为1时表示不可通过,要另找 路径。找到所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总数,如果无法到达,则输出0.

样例输入 Sample Input


 

3
0 0 0
0 1 1
1 0 0

样例输出 Sample Output

2

我的代码:

#include <iostream>
using namespace std;
int n,map[15][15],ans;
bool vis[15][15];
int dir[9][2]={{0},{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{1,-1},{-1,1},{1,1}};
bool valid(int x,int y)
{
    if (x>=1&&x<=n&&y>=1&&y<=n)
        return true;
    return false;
}
void dfs(int x,int y)
{
    if (x==1&&y==n)
    {
        ans++;
        return ;
    }
    for (int i=1;i<=8;i++)
    {
        int nx=x+dir[i][0],ny=y+dir[i][1];
        if (valid(nx,ny)&&!vis[nx][nx]&&map[nx][ny]==0)
        {
            vis[nx][ny]=true;
            dfs(nx,ny);
            vis[nx][ny]=false;
        }
    }
}
int main ()
{
    cin>>n;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
            cin>>map[i][j];
    vis[1][1]=true;
    dfs(1,1);
    cout<<ans;
    return 0;
}

测试结果:这个是什么意思

王梓澳在2019-06-28 19:13:50追加了内容

还有这个程序它什么都不会输出。。。

王梓澳在2019-06-28 19:20:34追加了内容

额,那个我自己找到错了,是这写错了,我随机采纳一个吧


0
已采纳
曾凡一
曾凡一
新手光能
新手光能

memory limit exceed应该是内存超出限制

0
汪恺恒
汪恺恒
中级启示者
中级启示者

第22行是!vis[nx][ny]

我要回答