• 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;
    }

  • 相关阅读:
    Python 3: 加密简介
    5 个最受人喜爱的开源 Django 包
    ROS tf-增加坐标系
    ROS tf监听编写
    ROS tf广播编写
    ROS tf基础使用知识
    ROS tf-数据类型
    Windows Vistual Studio 2013/2015 MRPT安装
    OMPL 在windows下的安装
    CMake 设置Target输出目录和后缀名
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7603959.html
Copyright © 2020-2023  润新知