zoukankan      html  css  js  c++  java
  • ZOJ2110 HDU1010 搜索 Tempter of the Bone

                                                                       传送门:Tempter of the Bone

                 大意是给一个矩阵,叫你是否可以在给定的可走路径上不重复地走,在最后一秒走到终点。

    我用了两个剪枝,且称其为简直001和剪枝002,事实证明001不要都可以,002不要也能过--||。就当练习一下剪枝。

    特别是002很有用:

                                          if( d % 2 != (Time-t) % 2 )

                                             return false ; (d=~x+~y)

    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<cstring> 
    #include<string.h>
    #include<cmath>
    using namespace std;
    const int INF=10000000;
    int dis[8][8];
    char c[8][8];
    int x[]={0,-1,0,1};
    int y[]={1,0,-1,0};
    int sx,sy;	
    int n,m,t;
    int fx,fy;
    void _Searchdis(int xx,int yy)
    {
         for(int i=0;i<4;i++)
          if(xx+x[i]>=1&&xx+x[i]<=n&&yy+y[i]>=1&&yy+y[i]<=m)
           if(c[xx+x[i]][yy+y[i]]!='X')
            if(dis[xx][yy]+1<dis[xx+x[i]][yy+y[i]]){
    			dis[xx+x[i]][yy+y[i]]=dis[xx][yy]+1;
    			_Searchdis(xx+x[i],yy+y[i]);
           }
           return ;
    }
    bool _BFS(int xx,int yy,int steps)
    {
    	if(xx==sx&&yy==sy&&steps==t) return true;
    	if(steps+dis[xx][yy]>t) return false;//剪枝1
    	if((abs(xx-sx)+abs(yy-sy))%2!=abs(t-steps)%2) return false;//剪枝2 
    	for(int i=0;i<4;i++)
    	 if(xx+x[i]>=1&&xx+x[i]<=n&&yy+y[i]>=1&&yy+y[i]<=m)
    	  if(c[xx+x[i]][yy+y[i]]!='X')
    	   {
    		    c[xx+x[i]][yy+y[i]]='X';
    		    if(_BFS(xx+x[i],yy+y[i],steps+1)) return true; 
    		    c[xx+x[i]][yy+y[i]]='.';
    	   }
    	   return false;
    }
    int main()
    {
        int i,j;
    	while(scanf("%d%d%d",&n,&m,&t)&&(n||m||t))
    	{
    		for(int i=1;i<=n;i++){
    		 for(int j=1;j<=m;j++)
    		  {	 
    			 cin>>c[i][j];
    			 if(c[i][j]=='D'){ sx=i;sy=j;}
    			 if(c[i][j]=='S'){ fx=i;fy=j;}
    		     dis[i][j]=INF;
    		  }
    		}
    		 dis[sx][sy]=0;
    		_Searchdis(sx,sy);
    		c[fx][fy]='X';//不要搞忘 
    		if(_BFS(fx,fy,0)) printf("YES
    ");
    		else printf("NO
    ");
    	}
    	return 0;
    }

  • 相关阅读:
    Uva11235
    Uva11300/BZOJ1045/BZOJ1465/BZOJ3292
    树形背包模板
    Miller-Rabin素性测试
    BZOJ1500 : [NOI2005]维修数列-fhq_Treap
    COGS2421 [HZOI 2016]简单的Treap
    用 fhq_Treap 实现可持久化平衡树
    hdu 1010(DFS) 骨头的诱惑
    hdu 1026(BFS+输出路径) 我要和怪兽决斗
    hdu 1072(BFS) 有炸弹
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7603959.html
Copyright © 2011-2022 走看看