棋盘游戏(BFS、DFS)
来源: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)相关推荐
- 邻结矩阵的建立和 BFS,DFS;;
邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
[问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...
- LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...
- LeetCode 1034. 边框着色(BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任 ...
- 全局路径规划:图搜索算法介绍1(BFS/DFS)
对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...
- 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...
java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...
- 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)
前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...
- bfs dfs 搜索入门模板题
bfs & dfs 题目链接:https://vjudge.net/contest/404511 1.最短路(bfs) (1)一维最短路 D - Catch That Cow 题目大意: 在一 ...
- 动态规划+BFS+DFS+回溯+红黑树+排序+链表+位运算(B站优质学习资源链接,后续会继续更新)
动态规划 正月点灯笼(UP主) 个人主页 https://space.bilibili.com/24014925/channel/detail?cid=12580 动态规划第一讲 https://ww ...
- SDUTOJ2779_找朋友(BFS | | DFS双解法)
找朋友 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description X,作为户外运动的忠实爱好者, ...
最新文章
- HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2
- php网站分享qq代码下载,HTML5QQ登录的一篇代码分享
- CentOS下的Mysql的安装和使用
- ubuntu 转mysql_(转)Ubuntu 16.04下安装MySQL
- 计算机处理负数加法,怎么让加法器实现两个负数相加
- Java 并发编程之 Callable 和 Future
- 第二百五十八天 how can I 坚持
- 沃兹批评苹果避税:纳税还不如我积极
- Python Flask接口开发
- html思维导图word版,[精选]思维导图(完美排版word).doc
- 华为研发岗位两轮面试的准备(本科生,已经拿到offer,月薪20k,15薪)
- java中obj_Java中Object类的详细介绍
- Unity游戏热更新
- 展辰涂料如何利用K2BPM加强流程管控?
- python 子域名爬取工具
- 低通滤波器 截止频率 学习笔记
- CSDN-markdown编辑器的模板(自己码一下方便以后使用)
- title显示不全的处理方法
- COVID-19席卷全球,看看GIS建模可视化能做些什么
- Python代码画小鸭穿雨靴--turtle绘图
热门文章
- PYQT安装及初始化
- EF和Dapper之争的关键
- 像素鸟html代码,flappy-bird方块版(用小方块替代像素鸟)
- swagger中没有新加的实体类属性(新加的属性在swagger中不显示)问题
- dock运行环境对linux的版本要求,Latte Dock 0.8发布,KDE Plasma 5.12或更高版本才能用...
- 【paper】latex使用algorithm工具包实现伪代码排版
- php无闪动刷新,简单的无闪动刷新页面/部分内容
- 解决小程序自定义底部菜单切换闪动
- 阿里云服务器ECS和独享虚拟主机、轻量应用服务器如何选择
- 联想拯救者Y7000加装内存条