博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ3009---冰壶游戏(深搜剪枝+回溯)
阅读量:4046 次
发布时间:2019-05-25

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

这道题题意还是需要仔细去理解的。

1.虽然求最短路径,但是这道题用广搜很难实现,因为棋盘在改变。题目有说steps要小于10也在提示用深搜,已经给了剪枝。
2.这道题太多细节,每次撞击才算是一次相邻的元素访问。起步的时候不能直接撞障碍物,~~~。

void dfs(int x, int y){    if (steps == 10)        return;    for (int i = 0; i < 4; i++)    {        int nx = x + dx[i];        int ny = y + dy[i];        if (a[nx][ny] == 1)continue;//起步直接撞击        while (nx >= 0 && nx < M&&ny >= 0 && ny < N&&a[nx][ny] == 0)        {            nx += dx[i];            ny += dy[i];        }        if (nx >= 0 && nx < M&&ny >= 0 && ny < N)        {            if (a[nx][ny] == 3)            {                steps++;                if (Min > steps)Min = steps;                steps--;//回溯去找更小的                return;            }            if (a[nx][ny] == 1)            {                a[nx][ny] = 0;                steps++;                dfs(nx - dx[i], ny - dy[i]);                 a[nx][ny] = 1;//回溯                steps--;//回溯            }        }    }}int main(){    int gx, gy;    while (cin >> N >> M, N || M)    {        for(int i=0;i
> a[i][j]; if (a[i][j] == 2) { sx = i; sy = j; a[i][j] = 0; } } Min = INT_MAX; steps = 0; dfs(sx, sy); if (Min == INT_MAX) cout << -1 << endl; else cout << Min << endl; } system("pause");}

转载地址:http://mzyci.baihongyu.com/

你可能感兴趣的文章
关于phpcms中模块_tag.class.php中的pc_tag()方法的含义
查看>>
vsftp 配置具有匿名登录也有系统用户登录,系统用户有管理权限,匿名只有下载权限。
查看>>
linux安装usb wifi接收器
查看>>
多线程使用随机函数需要注意的一点
查看>>
getpeername,getsockname
查看>>
让我做你的下一行Code
查看>>
浅析:setsockopt()改善程序的健壮性
查看>>
关于对象赋值及返回临时对象过程中的构造与析构
查看>>
VS 2005 CRT函数的安全性增强版本
查看>>
SQL 多表联合查询
查看>>
Visual Studio 2010:C++0x新特性
查看>>
drwtsn32.exe和adplus.vbs进行dump文件抓取
查看>>
cppcheck c++静态代码检查
查看>>
在C++中使用Lua
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
GitHub 万星推荐:黑客成长技术清单
查看>>
可以在线C++编译的工具站点
查看>>
关于无人驾驶的过去、现在以及未来,看这篇文章就够了!
查看>>
所谓的进步和提升,就是完成认知升级
查看>>