zoukankan      html  css  js  c++  java
  • hdu1010 Tempter of the Bone

    方法:dfs

    思想:由于本题中规定只有在固定时刻到达目的点才能逃脱,

    不能提早,更不能延迟,故不能用bfs。可以用dfs找出所有情况,

    若有可行解,直接返回即可。本题比较郁闷的是,在tzc上将方向

    数组int dir[4][2]稍微变动两下,就会超时。这也是今后出现TLE时

    该考虑的重要的一点吧,可以作为经验教训。

    #include<stdio.h>
    #include<math.h>
    char map[11][11];
    int dir[4][2]={{0,-1},{0,1},{1,0},{-1,0}};
    int t;
    int flag;
    int n,m;
    int dx,dy;
    void dfs(int i,int j,int step)
    {
    	int x,y;
        if(i==dx&&j==dy&&step==t)
    		flag=1;
    	if(step>t)
    		return;
    	if(flag)
    		return;
    	if((t-step)%2!=(abs(dx-i)+abs(dy-j))%2)//如果奇偶性不同就返回
    		return;
    	for(int u=0;u<4;u++)
    	{
            x=i+dir[u][0];
    		y=j+dir[u][1];
    		if(x>=0&&y>=0&&x<n&&y<m)
    		{
    			if(map[x][y]!='X')
    			{
    				map[x][y]='X';
    				dfs(x,y,step+1);
    				map[x][y]='.';
    			}
    		}
    	}	
    }
    int main()
    {
    	
    	int i,j,x,y,k;
    	while(scanf("%d%d%d",&n,&m,&t)!=-1)
    	{
    		k=0;
    		if(n==0&&m==0&&t==0)
    			break;
    		getchar();
    		for(i=0;i<n;i++)
    		{
    			for(j=0;j<m;j++)
    			{
    				scanf("%c",&map[i][j]);
    				if(map[i][j]=='S')
    				{
    					x=i;
    					y=j;
    					map[i][j]='X';
    				}
    				if(map[i][j]=='D')
    				{
    					dx=i;
    					dy=j;k++;
    				}
    				if(map[i][j]=='.')
    					k++;
    			}
    			getchar();
    		}
    		if(k<t)
    		{
    			printf("NO
    ");continue;
    		}
    	    flag=0;
    		dfs(x,y,0);
    		if(flag)
    			printf("YES
    ");
    		else
    			printf("NO
    ");
    	}
    	return 0;
    }
    
    /*
    4 4 5
    S.X.
    ..X.
    ..XD
    ....
    3 4 5
    S.X.
    ..X.
    ...D
    0 0 0
    */
    
  • 相关阅读:
    .Net vs Java?
    使用HyperV安装Linux系统
    C#调用Lua
    KubernetesService介绍服务发现
    缓存雪崩、缓存击穿和缓存穿透
    10 个开源项目
    minikube cncf.io
    Parallel的使用
    通过Rancher Desktop在桌面上运行K8s
    2021 .NET 开发者峰会顺利在网上落幕,线上直播回看汇总
  • 原文地址:https://www.cnblogs.com/zlyblog/p/3187593.html
Copyright © 2011-2022 走看看