问题标题: 酷町堂:1051 迷宫问题

0
0
已解决
杨子逸
杨子逸
新手天翼
新手天翼

#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstdio>
using namespace std;
int ex,ey,sx,sy,x;
int a[13][13];
bool map[13][13];
int dir[10][2]={{0,0},{0,1},{1,0},{0,-1},{-1,0},{-1,1},{-1,1},{1,1},{-1,-1}};
bool f=false;
int n,m;
int s[110][2];
int su,fu;
void search(int x, int y) 
{
    if(x==ex&&y==ey)
    {
        su++;
        for(int i=1; i<=8; i++) 
        {
            int nx = dir[i][0],ny = dir[i][1];
            if( nx>=1 && nx<=m && ny>=1 && ny<=n&& map[nx][ny]!=false&& a[nx][ny]!=1 )
            {
                map[nx][ny]=true;
                search(nx, ny);
                map[nx][ny]=false;
            }
        }                                                                  
    }
    for(int i=1; i<=8; i++) 
    {
        int nx = dir[i][0],ny = dir[i][1];
        if( nx>=1 && nx<=m && ny>=1 && ny<=n&& map[nx][ny]!=false&& a[nx][ny]!=1 )
        {
            map[nx][ny]=true;
            search(nx, ny);
            map[nx][ny]=false;
        }
    }
}
int main()
{
    cin>>n;
    m=n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            cin>>a[i][j];
    }
    ex=1,ey=1,sx=1,sy=n;
    search(ex,ey);
    cout<<su;
    return 0;
}

//为什么连测试数据都过不了???

@沈吴敏


0
已采纳
沈吴敏
沈吴敏
新手天翼
新手天翼

问题挺多的:

1. search里终点的判断的条件不对

2. dir数组有问题

3. su++后应该回溯,不是继续搜索

4. 起点在搜索前要标记为已走

5. nx ny算的不对

6. 判断某个位置能否走不对(map[nx][ny]!=false)

你再仔细考虑考虑

0
0
0
0
我要回答