博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 1010 Tempter of the Bone DFS 简单题 注意剪枝
阅读量:5131 次
发布时间:2019-06-13

本文共 2170 字,大约阅读时间需要 7 分钟。

题意:一只小狗要刚好在t时刻从起点都到终点,问可不可以。

注意剪枝。

 

1 #include
2 #include
3 #include
4 using namespace std; 5 int maze[9][9]; 6 bool vis[9][9]; 7 int n,m,t; 8 bool ans; 9 struct Point10 {11 int x,y;12 };13 int dx[4]={
0,0,-1,1};14 int dy[4]={
1,-1,0,0};15 Point p,e;16 void dfs(Point cur,int dep)17 {18 vis[cur.x][cur.y]=true;19 if(!ans&&cur.x==e.x&&cur.y==e.y&&dep==t)20 {21 ans=true;22 return ;23 }24 if(!ans&&dep>t)25 return ;26 for(int i=0;i<4;i++)27 {28 Point dcur;29 dcur.x=cur.x+dx[i];30 dcur.y=cur.y+dy[i];31 if(dcur.x<1||dcur.x>n||dcur.y<1||dcur.y>m)32 continue;33 if(vis[dcur.x][dcur.y])34 continue;35 if(!maze[dcur.x][dcur.y])36 continue;37 if(!ans)38 {39 dfs(dcur,dep+1);40 vis[dcur.x][dcur.y]=false;//注意回溯41 }42 }43 }44 int main()45 {46 while(scanf("%d%d%d",&n,&m,&t))47 {48 if(n==0&&m==0&&t==0)49 break;50 char s[15];51 for(int i=1;i<=n;i++)52 {53 scanf("%s",s+1);54 for(int j=1;j<=m;j++)55 {56 if(s[j]=='X')57 maze[i][j]=0;58 else if(s[j]=='.')59 maze[i][j]=1;60 else if(s[j]=='S')61 {62 p.x=i;63 p.y=j;64 maze[i][j]=1;65 }66 else67 {68 e.x=i;69 e.y=j;70 maze[i][j]=1;71 }72 }73 }74 ans=false;75 memset(vis,false,sizeof(vis));76 int a=abs(e.x+e.y-p.x-p.y);77 if(a>t) //剪枝78 ans=false;79 else if(a%2!=t%2) //剪枝80 ans=false;81 else82 dfs(p,0);83 if(ans)84 printf("YES\n");85 else86 printf("NO\n");87 }88 return 0;89 }
提交代码

 

转载于:https://www.cnblogs.com/-maybe/p/4394923.html

你可能感兴趣的文章
Real-Time Rendering 笔记
查看>>
如何理解HTML结构的语义化
查看>>
Intellij IDEA(eclipse设置)常用快捷键
查看>>
c语言字符输出格式化
查看>>
数组方法pop() push() unshift() shift()
查看>>
jq阻止事件冒泡,模拟下拉列表
查看>>
Python数据分析I
查看>>
数据库增删改查操作
查看>>
java解析xml的几种方式
查看>>
【驱动】第7课、块设备驱动之学习笔记
查看>>
C# WeakEvent
查看>>
Lodash js数据操作库
查看>>
珍惜每段平凡的生活
查看>>
UVA10815 - 详解Andy's First Dictionary
查看>>
2014第五届蓝桥杯JAVA本科B组_猜字母
查看>>
SignalR简介
查看>>
gbk和gb2312的区别
查看>>
Android工程方法数超过64k,The number of method references in a .dex file cannot exceed 64K.
查看>>
ftp (文件传输协议)
查看>>
ipsec在企业网中的应用(IKE野蛮模式)(转)
查看>>