首页 > 其他分享 >BFS和Dijkstra结合

BFS和Dijkstra结合

时间:2024-11-28 21:55:31浏览次数:4  
标签:nx dist map int BFS ny Dijkstra 结合 sin

Description

数据结构与算法实验题 Sins of a Solar EmpireP6

★实验任务

正如你所知道的s_sin是一个贪玩的不得了的小P孩QAQ,你也知道他最近很喜欢玩一个叫做太阳帝国的原罪的策略游戏去年
他已经和疯狂的AI交战了整整一年。而现在,战斗的序幕又要拉开了。

在某个星球上,该星球由n*m个方格组成,每个方格中可能为boss,s_sin,障碍,道路,小怪。s_sin想要去打爆boss,假
设他可以秒杀boss,现在他的任务只需要到达boss所在的位置。如果s_sin想要到达某个方格,但方格中有小怪,那么必须
打死小怪,才能到达这个方格。假设s_sin只能向上、下、左、右移动一个格子,移动一步用时1个时间单位,杀死小怪也用
1个时间单位。假设s_sin很强壮,可以杀死所有小怪。

试计算s_sin到达boss位置至少需要多少时间。注意:障碍是不能通过的。

Input

★数据输入

输入第一行为两个正整数n,m (1 < =n,m< =100), 表示该地图有n行m列。

接下来n行,每行m个字符:“.”代表道路 , “a”代表boss , “r”代表s_sin ,“#”代表障碍,“x”代表小怪。

Output

★数据输出

如果s_sin能到达boss位置则输出所需的最少时间。如果无法达到,则输出-1

Sample Input

5 5
.....
.....
axxxr
.....
.....

Sample Output

6

Sample Input

7 8

.#####.

.a#..rx

..#x.x.

..#..#.#

...##..

.#......
........

Sample Output

13

思路

#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#define M 0x3f3f3f
using namespace std;
typedef pair<int, int>PII;
const int N = 110;
int n, m;
int a, b;//起点
int c, d;//终点
char map[N][N];
int dist[N][N];
int dx[4] = { -1,1,0,0 };
int dy[4] = { 0,0,-1,1 };

void bfs(int x, int y)
{
	
	queue<PII>q;
	q.push({ x,y });

	dist[x][y] = 0;
	map[x][y] = '#';
	while (q.size())
	{
		
		auto u = q.front();
		q.pop();

		if (map[u.first][u.second] == 'a')
		{
			c = u.first, d = u.second;
			
			//return;
		}

		for (int i = 0; i < 4; i++)
		{
			int nx = u.first + dx[i]; int ny = u.second + dy[i];
			if (nx < 0 || nx >= n || ny < 0 || ny >= m)continue;
			if (map[nx][ny] == '#' )continue;

			int cmp = dist[u.first][u.second];

			if (map[nx][ny] == 'x')
			{
				if (dist[nx][ny] > cmp + 2) {
					dist[nx][ny] = cmp + 2;
					q.push({ nx,ny });
				}
			}
			else
			{
				if (dist[nx][ny] > cmp + 1) {
					dist[nx][ny] = cmp + 1;
					q.push({ nx,ny });
				}
				
			}
			
		}
		
	}
}

int main() {
	cin >> n >> m;

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> map[i][j];
			if (map[i][j] == 'r')
			{
				a = i, b = j;
			}
			dist[i][j] = M;
		}
	}
	bfs(a, b);
	
	if (dist[c][d] == -1)cout << -1 << endl;
	else cout << dist[c][d] << endl;
}
/*
7 8
#.#####.
#.a#..rx
#..#x.x.
..#..#.#
#...##..
.#......
........
*/

标签:nx,dist,map,int,BFS,ny,Dijkstra,结合,sin
From: https://www.cnblogs.com/szz123/p/18575318

相关文章

  • 利用树莓派Pico制作迷你小台灯:C++与硬件设计结合的分享
    小台灯是一个经典的电子设计项目,结合了LED和按键的基本应用,适合初学者学习控制逻辑和硬件交互。通过树莓派Pico开发板,本项目实现了用按键控制LED灯的开关功能。以下将详细解析项目内容,并结合C++代码讲解背后的核心技术。一、项目概述1.项目目标学习按键与LED的基本原理......
  • 结合SMART法则和团队协作软件,提升工作效率
    在项目管理中,明确的目标设定是成功的关键之一。SMART原则作为一种流行的目标设定方法,帮助团队设定清晰、可衡量和可实现的目标。而在实际操作中,如何将这些目标落实到日常任务和工作中,成为了提高效率和确保目标达成的挑战之一。幸运的是,现代项目管理工具,特别是基于看板理论的任务管......
  • Jenkins结合gitee自动化部署SpringBoot项目
    安装安装教程私信我免费获得安装包及教程。插件选择GiteePlugin配置源码管理填写源码地址&nbsp;注意:请确保genkins所在的服务器有权限git拉取远程仓库代码,如果不可以请参考ssh配置centos配置ssh拉取远程git代码image构建触发器1.勾选Giteewebhook触发构建2.生成webh......
  • 高性能AMD香港服务器:卓越性能与优势完美结合
    高性能AMD香港鼎峰服务器:卓越性能与全面优势的完美结合在当今数字化时代,高性能服务器已成为企业和开发者不可或缺的重要工具。香港鼎峰服务器凭借其卓越的性能和全面的优势,在众多服务器提供商中脱颖而出,成为众多企业和开发者的首选。香港鼎峰服务器采用先进的硬件设施和高......
  • MATLAB 实现 SSA-GRU和 GRU(门控循环单元)结合麻雀算法优化时间序列预测
    目录1.项目概述...11.1背景...11.2模型描述...12.项目设计...12.1数据生成...12.2TTA分解...22.3GTT模型构建...32.4麻雀算法优化GTT超参数...32.5模型训练与预测...42.6结果评估与优化前后比较...43.完整代码...54.项目总结...7未来......
  • 1030 Travel Plan(dijsktra + dfs/bfs + 回溯)
     题面意思比较清晰,就是优先最短路,同距离取最小花费。1#include<bits/stdc++.h>2usingnamespacestd;3intn,m,s,d;4typedefpair<int,int>pii;5vector<pii>graph[505];6set<pii>min_heap;7intcost[505][505]={0};8vector<bool>v......
  • 超详细!!传统NLP算法结合大模型私有化部署简易知识问答体系工程实践
    作者:京东物流郭卓勋一、业务背景在物流私域体系构建中,形成了多个微信群生态,需要投放自动回复机器人来自动化回复用户问题,希望能够用最小的成本满足基本问答。由于需要从头开始自建全流程算法问答体系,需要面临一下几个问题:1.数据不外流:用户数属于隐私数据,不可以直接调用外部API......
  • Perspective :一个基于 Web 的前端与后端结合的可视化工具
    随着数据可视化需求的不断增长,能够实时、高效地处理和展示动态数据的工具越来越受到开发者和数据分析师的青睐。Perspective项目正是在这种背景下应运而生的一款开源库。由FINOS提供支持,Perspective是一个强大的交互式数据可视化工具,能够处理海量数据并动态展示,广泛应用于金......
  • 人工智能学习框架:理论与实践的结合
    人工智能(AI)是近年来发展最快、应用最广泛的技术领域之一。随着大数据、计算能力以及算法的不断进步,AI已经成为了各行各业转型的关键力量。从机器学习(ML)到深度学习(DL),各种人工智能学习框架不断涌现,为开发者提供了高效的工具和方法。本文将介绍几种常见的人工智能学习框架,并探讨......
  • 最短路径Dijkstra算法
    大家好!今天我想给大家讲一个非常有趣的算法,叫做Dijkstra算法。这个算法可以帮助我们在图中找到从一个点到另一个点的最短路径,就好像我们在玩一个寻找宝藏的游戏!故事开始想象你住在一个湖边,湖上有很多小岛,每个小岛之间都有桥连接,但是这些桥的长度不一样,有的很短,有的很长。现在......