设为首页 加入收藏

TOP

hdu1010――Tempter of the Bone(DFS+剪枝) (二)
2014-11-23 21:34:27 来源: 作者: 【 】 浏览:5
Tags:hdu1010 Tempter the Bone DFS 剪枝
[4][2] = {-1,0,1,0,0,-1,0,1}; void dfs(int si,int sj,int cnt)//深搜 { if(si>=n || sj>=m || si<0 || sj < 0)//出界 return ; if(cnt == t && si == di && sj == dj)//到达终点 flag = 1; if(flag) return ; for(int i = 0; i<4; i++) { int nextx=si+to[i][0]; int nexty=sj+to[i][1]; if(nextx>=0&&nextx=0&&nexty>map[i][j]; if(map[i][j] == 'S') { si = i; sj = j; //标记起点 } else if(map[i][j] == 'D') { di = i; dj = j; //标记终点 } else if(map[i][j] == 'X') wall++;//对“#计数” } if(n*m-wall<=t||abs(si-di)+abs(sj-dj)>t)//t是代表要走的步数,步数加墙数必须小于总格子数的,因为所有格子中还包括了S和D,这是剪枝 { printf("NO\n"); continue; //abs(si-ei)+abs(sj-ej)为起点到终点的最短步数 } if((abs(si-di)+abs(sj-dj))%2!=(t%2)) { //狗走到门的时间必须和题目给定的时间是同奇同偶的,否则也不能在指定的那秒到达门 printf("NO\n"); continue; } flag = 0; map[si][sj] = 'X';//出发点是不可能再走的了,变为墙 dfs(si,sj,0); if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Strategic Game HDU 下一篇九度笔记之 1420:Jobdu MM分水果

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)