问题标题: 2147 危险的森林怎么写?

0
0
已解决
陶梓锐
陶梓锐
新手光能
新手光能

一个面积为n * n的森林,里面布满了陷阱,每个陷阱有2种状态:s和d。前者表示陷阱已经被破坏,后者表示陷阱正常。现在探险家伊泽处在森林中的某个位置,他每次只能移动到上、下、左、右这四个方向之一的相邻位置上,伊泽想要从点A走到点B,但是伊泽不能走出森林,请你写个程序,判断伊泽能不能办到。如果起点或者终点有一个布置有正常的陷阱(状态为d),则看成无法办到。

http://judge.codingtang.com/problem/2147/


0
已采纳
陆麟瑞
陆麟瑞
资深天翼
资深天翼

深度优先搜索+记忆化搜索

bool search(int x,int y)
{
    if(f[x][y]) return false;
    if(x==x1&&y==y1) 
    {
        if(a[x][y]=='s')return true;
        return false;
    }
    if(x<1||x>n||y<1||y>n) return false;
    if(b[x][y]) return false;
    //cout<<b[x][y]<<' '<<x<<' '<<y<<endl;
    if(a[x][y]=='d') return false;
    b[x][y]=true;
    if(search(x+1,y)) return true;
    if(search(x-1,y)) return true;
    if(search(x,y+1)) return true;
    if(search(x,y-1)) return true;
    b[x][y]=false;
    f[x][y]=true;
    return false;
}
0
程天瑞
程天瑞
资深守护
资深守护
flag[l][r]=true;
        for (int i=0;i<4;i++)
        {
            int nextl=l+dir[i][0];
            int nextr=r+dir[i][1];
            if (nextl>=1 && nextl<=n && nextr>=1 && nextr<=n 
            && !flag[nextl][nextr] && map[nextl][nextr]=='s')
                search(nextl,nextr);
        }

这题可以用搜索回溯

因为题目不要求输出所有路径,所以只要判断能不能到就可以了。只要搜索,不要回溯,否则超时

0
0
0
我要回答