zoukankan      html  css  js  c++  java
  • HDU 1010 Tempter of the Bone【DFS】

    学习剪枝的第一篇@_@
    学习别人的剪枝,一剪就是两天@_@----

    参看的这篇--
    http://blog.csdn.net/libin56842/article/details/8962512
    自己的小体会--
    奇偶剪枝可以举两个一般的例子
    比如样例
    S.X.
    ..X.
    ..XD
    ....
    转化为所需要的步数
    S 6 X 2
    6 5 X 1
    5 4 X D
    4 3 2 1
    可以看到步数为奇数的时候,所需要的时间也为奇数
    步数为偶数的时候,需要的时间也为偶数(因为是一秒走一步)

    #include<iostream>  
    #include<cstdio>  
    #include<cstring>  
    #include<algorithm> 
    #include<math.h> 
    using namespace std;
    int n,m,t,flag,di,dj,wall;
    int dir[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
    char map[10][10];
    
    void dfs(int si,int sj,int cnt)
    {
    	int tem;
    	if(si<=0||sj<=0||si>n||sj>m)
    	return;
    	if(si==di&&sj==dj&&cnt==t) flag=1;	
    	if(flag) return;
    	
    	tem=t-cnt-abs(di-si)-abs(dj-sj);
    	if(tem<0||tem%2)
    	return;
    	
    	for(int i=0;i<4;i++)
    	{
    		if(map[si+dir[i][0]][sj+dir[i][1]]!='X')
    		{
    			map[si+dir[i][0]][sj+dir[i][1]]='X';
    			dfs(si+dir[i][0],sj+dir[i][1],cnt+1);
    			map[si+dir[i][0]][sj+dir[i][1]]='.';	
    		}
    	}
    	return;	
    }
    int main()
    {
    	int si,sj;
    	while(scanf("%d %d %d",&n,&m,&t)!=EOF&&n&&m&&t)
    	{
    		wall=0;
    		for(int i=1;i<=n;i++)
    		{
    			for(int 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)
    		{
    			printf("NO
    ");
            	continue;
    		}
    		flag=0;
    		map[si][sj]='X';
    		dfs(si,sj,0);
    		if(flag)
    		printf("YES
    ");
    		else
    		printf("NO
    ");	
    	}
    }
    

      

  • 相关阅读:
    Python学习(3)——if语句
    Python学习(2)——编码
    一次性邮箱
    Python学习(1)
    Hello World
    java设计模式创建篇------原型模式
    Java技巧------Cloneable接口与clone方法
    java设计模式创建篇------抽象工厂
    java设计模式创建篇------工厂模式
    python函数式编程
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4275052.html
Copyright © 2011-2022 走看看