zoukankan      html  css  js  c++  java
  • (DFS)hdoj1010-Tempter of the Bone

    #include<cstdio>
    #include<cmath>
    #include<stdlib.h>
    int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}},escape,n,m,t,si,sj,ei,ej;
    char a[10][10];
    void dfs(int si,int sj,int cnt)
    {
        if(si<0||si>=n||sj<0||sj>=m)
            return ;
        if(si==ei&&sj==ej&&cnt==t)
        {
            escape=1;
            return;
        }
        int temp=t-cnt-abs(ei-si)-abs(ej-sj);
        if(temp<0||temp%2)
            return ;
        for(int i=0;i<4;i++)
        {
            if(a[si+dir[i][0]][sj+dir[i][1]]!='X')
            {
                a[si+dir[i][0]][sj+dir[i][1]]='X';
                dfs(si+dir[i][0],sj+dir[i][1],cnt+1);
                if(escape)
                    return;
                a[si+dir[i][0]][sj+dir[i][1]]='.';
            }
        }
        return;
    
    }
    int main()
    {
        int wall=0;
        while(scanf("%d%d%d",&n,&m,&t))
        {
            wall=0;
            escape=0;
            if(n==0&&m==0&&t==0)    break;
            getchar();
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m;j++)
                {
                    scanf("%c",&a[i][j]);
                    if(a[i][j]=='S')
                    {
                        si=i;
                        sj=j;
                    }
                    if(a[i][j]=='X')
                        wall++;
                    if(a[i][j]=='D')
                    {
                        ei=i;
                        ej=j;
                    }
                }
                getchar();
            }
            if(n*m-wall<=t)
            {
                printf("NO
    ");
                continue;
            }
            a[si][sj]='X';
            dfs(si,sj,0);
            if(escape)
                printf("YES
    ");
            else
                printf("NO
    ");
        }
        return 0;
    }

    正式开始学习和练习DFS、BFS,先从这DFS道中最入门的题开始。

    关键:剪枝。

  • 相关阅读:
    马氏距离的深入理解
    Mahalanobis Distance(马氏距离)
    Weka EM 协方差
    数据挖掘、概率分析与决策支持
    二、 Android中gravity与layout_gravity的区别
    一、 Android完全退出应用程序
    python configparse
    时间戳与时间互转
    python argparse
    时间插件
  • 原文地址:https://www.cnblogs.com/quintessence/p/6022008.html
Copyright © 2011-2022 走看看