• (HDU)1010 -- Tempter of the Bone (骨头的诱惑)


    题目链接:https://vjudge.net/problem/HDU-1010

    深度优先搜索典型例题

    月下版本代码;

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    char map[9][9];
    int n,m,t,di,dj;
    bool escape;
    int delta[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
    void dfs(int si,int sj,int cnt)
    {
        int i,temp;
       if(si>n||sj>m||si<=0||sj<=0) return;
       if(cnt==t&&si==di&&sj==dj)    escape=1;
       if(escape) return;
    
       temp=(t-cnt)-abs(si-di)-abs(sj-dj);
       if(temp<0||temp&1) return;
       for(i=0;i<4;i++){
          if(map[si+delta[i][0]][sj+delta[i][1]]!='X')
          {
             map[si+delta[i][0]][sj+delta[i][1]]='X';
             dfs(si+delta[i][0],sj+delta[i][1],cnt+1);
             map[si+delta[i][0]][sj+delta[i][1]]='.';
          }
       }
       return;
    }
    
    int main()
    {
        int i,j,si,sj;
        while(cin>>n>>m>>t)
        {
          if(n==0&&m==0&&t==0) break;
          int wall=0;
          for(i=1;i<=n;i++)
             for(j=1;j<=m;j++)
             {
                cin>>map[i][j];
                if(map[i][j]=='S') { si=i; sj=j; }
                else if(map[i][j]=='D') { di=i; dj=j; }
                else if(map[i][j]=='X') wall++;
             }
           if(n*m-wall<=t)
           {
               cout<<"NO"<<endl;
               continue;
           }
           escape=0;
           map[si][sj]='X';
           dfs(si,sj,0);
           if(escape) cout<<"YES"<<endl;
           else cout<<"NO"<<endl;
       }
       return 0;
    }
  • 相关阅读:
    EditPlus保存文件时不生成其备份文件的方法
    一台电脑同时运行多个tomcat配置方法
    Dom4j写XML
    .....
    编程备忘录
    背包问题
    chrome新版不再支持-webkit-text-size-adjust
    安装grunt需要的grunt插件
    初学web前端
    心情烦躁、、
  • 原文地址:https://www.cnblogs.com/ACDoge/p/6139203.html
Copyright © 2020-2023  润新知