HDU 2102 A计划

news/2024/7/7 19:46:58

该题是一道典型的搜索题,

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Node
{int x, y;int time;int flag;
}q[100024];
int d[4][2]={ 0,1,1,0,0,-1,-1,0  };
int N,M;
char map[2][13][13];
void getxy( int &X,int &Y,int &K )
{for( int k=0;k<2;k++ )for( int i=1;i<=N;i++ )for( int j=1;j<=M;j++ ){if( map[k][i][j]=='S' ){K=k;X=i;Y=j;return ;    }     }     
}
int push( int x,int y,int time,int flag,int end )
{Node t;t.x=x; t.y=y;t.time=time;t.flag=flag;q[end++]=t;return end;    
}
bool judge( int x,int y,int flag,int time )
{if( map[flag][x][y]!=0 && map[flag][x][y]!='*'&&time>=0 )return true;else return false;    
}
bool BFS( int x,int y,int k,int time )
{  int hash[2][14][14]={0},first=0,end=0;end=push( x,y,time,k,end );hash[k][x][y]=1;while( first<end ){if( map[q[first].flag][q[first].x][q[first].y]=='P' )return true;for( int i=0;i<4;i++ ){int dx=q[first].x + d[i][0];int dy=q[first].y + d[i][1];int flag=q[first].flag;int time=q[first].time-1;if( judge( dx,dy,flag,time )&&!hash[flag][dx][dy] ){if( map[flag][dx][dy]!='#' ){if( map[flag][dx][dy]=='P' ){ return true;}end=push( dx,dy,time,flag,end );}hash[flag][dx][dy]=1;if( map[flag][dx][dy]=='#'&&!hash[(flag+1)%2][dx][dy])if(map[( flag +1 )%2][dx][dy]!='*'&&map[(flag +1 )%2][dx][dy]!='#' ){if( map[( flag +1 )%2][dx][dy]=='P' ) return true;hash[( flag+1 )%2][dx][dy]=1;end=push( dx,dy,time,(flag+1)%2,end ) ;  }}     }first++;       } return false;    
}
int main()
{int n,T,X,Y,K;scanf( "%d",&n );while( n-- ){memset( map,0,sizeof( map ) );scanf( "%d%d%d",&N,&M,&T );for( int k=0;k<2;k++ )for( int i=1;i <= N; i++ ){scanf( "%s",map[k][i]+1 );     } getxy( X,Y,K );if( BFS( X,Y,K,T ) ) printf( "YES\n" );else printf( "NO\n" );     }   
}

 代码2:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
class Node
{
public:
int floor,x,y,time;
};
Node queue[1024];
char map[2][14][14];
int d[4][2]={ 0,1,1,0,0,-1,-1,0 };
bool BFS( int time )
{
int first = 0 , end = 0;
Node t;
t.x = 1;
t.y = 1;
t.time = 0;
t.floor = 0;
queue[end] = t;
end++;
map[0][1][1] = '*';
while( first < end )
{
t = queue[first];
int T = t.time+1;
if(time>=T)
{
for( int i = 0; i< 4 ; i++ )
{
int dx = t.x + d[i][0];
int dy = t.y + d[i][1];
if( map[t.floor][dx][dy]=='#'||map[t.floor][dx][dy]=='.'||map[t.floor][dx][dy]=='P' )
{
// if( t.floor==1 ) printf( "%d %d %d time=%d\n",t.floor,dx ,dy ,t.time);
if( map[t.floor][dx][dy]=='P' )
{
return true;
}
if( map[t.floor][dx][dy]=='#' )
{
if(map[(t.floor+1)%2][dx][dy]!='*'&&map[(t.floor+1)%2][dx][dy]!='#')
{
// printf( "%d %d %d time=%d\n",t.floor,dx ,dy ,T);

if( map[(t.floor+1)%2][dx][dy]=='P' )
{
return true;
}
else
{
queue[end].time = T;
queue[end].x = dx;
queue[end].y = dy;
queue[end].floor = (t.floor+1)%2;
map[(t.floor+1)%2][dx][dy]='*';
end++;
}
map[t.floor][dx][dy] = '*';
}
}
if( map[t.floor][dx][dy]=='.' )
{
map[t.floor][dx][dy]='*';
queue[end].time = T;
queue[end].x = dx;
queue[end].y = dy;
queue[end].floor = t.floor;
end++;
}
}
}
}
first++;
}
return false;
}
int main( )
{
int Case,n,m,time;
while( scanf( "%d",&Case )==1 )
{
while( Case -- )
{
memset( map , 0 ,sizeof( map ) );
scanf( "%d%d%d",&n , &m ,&time );
for( int i = 0; i<2 ; i++ )
{
for( int j=1 ; j<= n ; j++ )
scanf( "%s",map[i][j]+1 );
}
if( BFS( time ) )
printf( "YES\n" );
else printf( "NO\n" );
}
}
return 0;
}

 

转载于:https://www.cnblogs.com/bo-tao/archive/2011/11/24/2261432.html


http://lihuaxi.xjx100.cn/news/253193.html

相关文章

判断链表是否存在环(及其延伸)

有一个单链表&#xff0c;其中可能有一个环&#xff0c;也就是某个节点的next指向的是链表中在它之前的节点&#xff0c;这样在链表的尾部形成一环。问题&#xff1a;1、如何判断一个链表是不是这类链表&#xff1f;2、如果链表为存在环&#xff0c;如果找到环的入口点&#xf…

NCEPU:线下组队学习周报(007)

线下组队学习 经过一段时间的准备&#xff0c;我们组织的线下组队学习逐步进入正轨。欢迎华北电力大学保定校区的伙伴加入进来大家一起学习一起成长。 我们开展组队学习的内容为&#xff1a; &#xff08;1&#xff09;周志华的《机器学习》&#xff08;西瓜书&#xff09; …

谁说 Python 写 GUI 程序丑?那是你不会美化!

作者 | 派森酱来源 | Python技术在平时工作学习当中&#xff0c;我们经常会编写一些简单的 Python GUI 工具&#xff0c;以此来完成各种各样的自动化任务&#xff0c;比如批量处理文件&#xff0c;批量处理图片等等。当我们进行这些工具的编写之时&#xff0c;往往只关注了功能…

Java实现二维码

Java实现二维码 最近突然想写一些博客&#xff0c;所以就陆陆续续的编写一些自我感觉有用的并且大家也可能用到的一些技术代码。方便互相学习交流。 今天这篇博客&#xff0c;主要是利用Java实现二维码&#xff1a; 在写代码之前先讲一下整体思路&#xff0c;以方便更好更快捷的…

【青少年编程】【二级】寻找宝石

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

zabbix4.0构建实录

【Nginx】 #wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo [rootcentos ~]# yum -y install zlib pcre pcre-devel openssl openssl-devel[rootcentos ~]# useradd -s /sbin/nologin nginx [rootzabbix-server ~]# yum install -y nginx 【M…

[原创]Bash中的$*和$@的区别

2019独角兽企业重金招聘Python工程师标准>>> 在Bash脚本中&#xff0c;$*和$都用于表示执行脚本时所传入的参数。先通过一个例子看看他们的区别: #!/bin/bash # testvar.sh echo "-------------ISF is set to \"-seperator\" ------------" IFS…

VNC的安装与使用

VNC的安装与使用。 说明&#xff1a;文章内容比较简单&#xff0c;献给那些初学者作为参考。 文章分为两部分&#xff0c;第一部分为VNC简介&#xff0c;第二部分为VNC的安装与使用。 文章为小弟结合书籍与小弟的实际操作总结出来的&#xff0c;如有错误与疏漏之处…