来源:https://blog.csdn.net/gladyoucame/article/details/8803904#commentBox

题目:
有一个6*6的棋盘,每个棋盘上都有一个数值,现在又一个起始位置和终止位置,请找出一个从起始位置到终止位置代价最小的路径:
1、只能沿上下左右四个方向移动
2、总代价是每走一步的代价之和
3、每步(从a,b到c,d)的代价是c,d上的值与其在a,b上的状态的乘积
4、初始状态为1,每走一步,状态按如下公式变化:(走这步的代价%4)+1。

个人理解:本质上是一个带权树的最短路径搜索问题,直观反应采用BFS搜索。
自己先暂且记录一下。

#include <iostream>
#include <queue>
using namespace std;struct Node
{int x, y, sum, statu;
};int ans;
int map[6][6];
int opt[6][6][4]; //记录最优解,剪枝条件。4中状态都要记录
Node start;
int ex, ey;
int cnt = 0;
int dir[4][2] = { { 0, 1 },{ 1, 0 },{ 0, -1 },{ -1, 0 } };
queue<Node> q;
void bfs(Node n)
{q.push(n);int tempx, tempy, cost;while (!q.empty()){cnt++;Node tn = q.front();q.pop();for (int i = 0; i < 4; i++){tempx = tn.x + dir[i][0];tempy = tn.y + dir[i][1];if (tempx >= 0 && tempx < 6 && tempy >= 0 && tempy < 6){cost = tn.statu * map[tempx][tempy];//如果这一步比以前的某一步代价还大  或者 比到终点的代价还大if (tn.sum + cost < opt[tempx][tempy][cost % 4] && tn.sum + cost < opt[ex][ey][cost % 4]){opt[tempx][tempy][cost % 4] = tn.sum + cost;Node temp;temp.x = tempx;temp.y = tempy;temp.sum = tn.sum + cost;temp.statu = cost % 4 + 1;q.push(temp);}}}}}int main()
{while (1){for (int i = 0; i < 6; i++)for (int j = 0; j < 6; j++){cin >> map[i][j];for (int k = 0; k < 4; k++)opt[i][j][k] = 100000;}start.sum = 0;start.statu = 1;ans = 100000;cin >> start.x >> start.y >> ex >> ey;if (start.x == ex && start.y == ey) {cout << 0 << endl;return 0;}bfs(start);for (int i = 0; i < 4; i++){if (ans > opt[ex][ey][i])ans = opt[ex][ey][i];}//cout << cnt << endl;cout << ans << endl;}return 0;
}

棋盘游戏(BFS、DFS)相关推荐

  1. 邻结矩阵的建立和 BFS,DFS;;

    邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...

  2. [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]

    [问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...

  3. LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...

  4. LeetCode 1034. 边框着色(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任 ...

  5. 全局路径规划:图搜索算法介绍1(BFS/DFS)

    对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...

  6. 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...

    java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...

  7. 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)

    前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...

  8. bfs dfs 搜索入门模板题

    bfs & dfs 题目链接:https://vjudge.net/contest/404511 1.最短路(bfs) (1)一维最短路 D - Catch That Cow 题目大意: 在一 ...

  9. 动态规划+BFS+DFS+回溯+红黑树+排序+链表+位运算(B站优质学习资源链接,后续会继续更新)

    动态规划 正月点灯笼(UP主) 个人主页 https://space.bilibili.com/24014925/channel/detail?cid=12580 动态规划第一讲 https://ww ...

  10. SDUTOJ2779_找朋友(BFS | | DFS双解法)

    找朋友 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description X,作为户外运动的忠实爱好者, ...

最新文章

  1. HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2
  2. php网站分享qq代码下载,HTML5QQ登录的一篇代码分享
  3. CentOS下的Mysql的安装和使用
  4. ubuntu 转mysql_(转)Ubuntu 16.04下安装MySQL
  5. 计算机处理负数加法,怎么让加法器实现两个负数相加
  6. Java 并发编程之 Callable 和 Future
  7. 第二百五十八天 how can I 坚持
  8. 沃兹批评苹果避税:纳税还不如我积极
  9. Python Flask接口开发
  10. html思维导图word版,[精选]思维导图(完美排版word).doc
  11. 华为研发岗位两轮面试的准备(本科生,已经拿到offer,月薪20k,15薪)
  12. java中obj_Java中Object类的详细介绍
  13. Unity游戏热更新
  14. 展辰涂料如何利用K2BPM加强流程管控?
  15. python 子域名爬取工具
  16. 低通滤波器 截止频率 学习笔记
  17. CSDN-markdown编辑器的模板(自己码一下方便以后使用)
  18. title显示不全的处理方法
  19. COVID-19席卷全球,看看GIS建模可视化能做些什么
  20. Python代码画小鸭穿雨靴--turtle绘图

热门文章

  1. PYQT安装及初始化
  2. EF和Dapper之争的关键
  3. 像素鸟html代码,flappy-bird方块版(用小方块替代像素鸟)
  4. swagger中没有新加的实体类属性(新加的属性在swagger中不显示)问题
  5. dock运行环境对linux的版本要求,Latte Dock 0.8发布,KDE Plasma 5.12或更高版本才能用...
  6. 【paper】latex使用algorithm工具包实现伪代码排版
  7. php无闪动刷新,简单的无闪动刷新页面/部分内容
  8. 解决小程序自定义底部菜单切换闪动
  9. 阿里云服务器ECS和独享虚拟主机、轻量应用服务器如何选择
  10. 联想拯救者Y7000加装内存条