zoukankan      html  css  js  c++  java
  • POJ 3009 Curling 2.0 回溯,dfs 难度:0

    http://poj.org/problem?id=3009

    如果目前起点紧挨着终点,可以直接向终点滚(终点不算障碍)

    #include <cstdio>
    #include <cstring>
    using namespace std;
    const int maxn = 21;
    int maz[maxn][maxn];
    int n,m;
    const int dx[4] = {1,-1,0,0};
    const int dy[4] = {0,0,1,-1};
    
    bool in(int x,int y)
    {
        return x >= 0 && x < n  && y >= 0 && y < m;
    }
    
    bool dfs(int x,int y,int step)
    {
        if(step == 0)return maz[x][y] == 3;
        for(int i = 0; i < 4; i++)
        {
            int tx = x + dx[i],ty = y + dy[i];
            if(maz[tx][ty] == 1)continue;
            while(in(tx,ty) && maz[tx][ty] == 0)
            {
                tx += dx[i];
                ty += dy[i];
            }
            if(!in(tx,ty))continue;
            if(maz[tx][ty] == 3)return true;
            maz[tx][ty] = 0;
            if(dfs(tx - dx[i],ty - dy[i],step - 1))
            {
                return true;
            }
            maz[tx][ty] = 1;
        }
        return false;
    }
    int main()
    {
        while(scanf("%d%d",&m,&n) == 2 && (m || n))
        {
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < m; j++)
                {
                    scanf("%d",maz[i] + j);
                }
            }
            for(int x = 0; x < n; x++)
            {
                for(int y = 0; y < m; y++)
                {
                    if(maz[x][y] == 2)
                    {
                        maz[x][y] = 0;
                        bool fl = false;
                        for(int i = 0; i < 11; i++)
                        {
                            if(dfs(x, y ,i))
                            {
                                fl = true;
                                printf("%d
    ",i);
                                break;
                            }
                        }
                        if(!fl)
                        {
                            puts("-1");
                        }
                        break;
                    }
                }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Python基础之初始编码
    Excel图表编辑---表格移动,样式修改
    Python基础之Python的变量、常量
    刷题62. Unique Paths
    刷题56. Merge Intervals
    刷题55. Jump Game
    刷题53. Maximum Subarray
    刷题49. Group Anagrams
    刷题48. Rotate Image
    刷题46. Permutations
  • 原文地址:https://www.cnblogs.com/xuesu/p/4555653.html
Copyright © 2011-2022 走看看