HDU 1010 (入门搜索)
来源:互联网 发布:九阴绝学披风升级数据 编辑:程序博客网 时间:2024/04/29 19:54
理解dfs:
- 结点的层层深入
- 回溯
- 入口条件
出口条件
“`
include
include
include
using namespace std;
char map[10][10];
int n,m,step;
int di,dj;
int flag;
int dir[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};
void dfs(int si,int sj,int t)
{
if(si < 1 || sj < 1 || si > n || sj > m) //判断边界
return ;
if(t == step && si == di && sj == dj)
flag = true;
if(flag)
return ;
int temp = (step - t) - abs(si-di) - abs(sj-dj);//奇偶性的减枝
if(temp < 0 || temp&1)
return ;
for(int i = 0;i < 4; i++){
if(map[si+dir[i][0]][sj+dir[i][1]] != ‘X’){
map[si+dir[i][0]][sj+dir[i][1]] = ‘X’;
dfs(si+dir[i][0],sj+dir[i][1],t+1);
map[si+dir[i][0]][sj+dir[i][1]] = ‘.’;
}
}
return ;
}
int main()
{
// freopen(“in.txt”,”r”,stdin);
while(scanf(“%d%d%d”,&n,&m,&step) != EOF){
if(n == 0 && m == 0 && step == 0)
break;
int si,sj;
for(int i = 1;i <= n; i++){
for(int j = 1;j <= m; j++){
cin>>map[i][j];
if(map[i][j] == ‘S’){
si = i;
sj = j;
}
if(map[i][j] == ‘D’){
di = i;
dj = j;
}
}
}
flag = false;
map[si][sj] = ‘X’;
dfs(si,sj,0);
if(flag)
cout<<”YES”<
- HDU 1010 (入门搜索)
- hdu素数环(搜索入门题)
- hdu入门搜索题
- 简单搜索入门(二):二分答案 HDU 5248
- hdu 1312 BFS DFS搜索入门
- HDU 1010(搜索题,DFS+剪枝)
- hdu 1010 搜索(dfs+剪枝)
- hdu 1010 搜索+剪枝!!!!
- HDU 1010 搜索
- HDU 1010 搜索剪枝
- HDU 1010 搜索+剪枝
- HDU 1078(搜索)
- 基础搜索入门(二)
- 广度优先搜索(入门)
- 深度搜索DFS hdu-1010
- HDU 1010 【搜索+奇偶剪枝】
- HDU 1010 深度搜索问题
- hdu 1240 Asteroids!(搜索)
- 每天一个常用linux命令(6)--rmdir
- A new start
- 麦子学院深度学习视频课程(中文授课、代码讲解为主)
- android-大图轮播
- Mac系统下Eclipse代码联想功能(代码助手,代码提示)快捷键
- HDU 1010 (入门搜索)
- PHP 常用函数 技巧方法集合 实例 运用篇
- 用火狐浏览器的firbug调试
- 什么是重构
- WebView的使用
- 获取js文件后面的参数
- android音量条——AudioManager和SeekBar应用
- iOS UILabel显示html标签
- 大数加法(C语言)#include<stdio.h> #include<stdlib.h> #include<string.h> char A[10005]; char B[10005]; int