【Dijkstra】 PUBG 北京信息科技大学校赛A

本文介绍了一种基于最短路径算法的游戏场景中寻找避开敌人的最优路径的方法。通过Dijkstra算法实现,输入地图和敌人分布,输出从起点到安全区的最少遭遇敌人数。涉及算法的具体实现和代码细节。
链接:https://www.nowcoder.com/acm/contest/118/A
来源:牛客网
最近,喜爱ACM的PBY同学沉迷吃鸡,无法自拔,于是又来到了熟悉的ERANGEL。经过一番搜寻,PBY同学准备动身前往安全区,但是,地图中埋伏了许多LYB,PBY的枪法很差,希望你能够帮他找到一条路线,每次只能向上、下、左、右移动,尽可能遇到较少的敌人。
输入描述:
题目包含多组测试,请处理到文件结束;第一行是一个整数n,代表地图的大小;接下来的n行中,每行包含n个整数a,每个数字a代表当前位置敌人的数量;1 < n <= 100,1 <= a <= 100,-1代表当前位置,-2代表安全区。
输出描述:
对于每组测试数据,请输出从当前位置到安全区所遇到最少的敌人数量,每个输出占一行。

示例1

输入
5
6 6 0 -2 3
4 2 1 2 1
2 2 8 9 7
8 1 2 1 -1
9 7 2 1 2

输出
9



示例2

输入
5
62 33 18 -2 85
85 73 69 59 83
44 38 84 96 55
-1 11 90 34 50
19 73 45 53 95

输出

173

#include <bits/stdc++.h>
using namespace std;

const int inf = 0x7FFFFFFF;
int n;
int si, sj, ei, ej;
int dir[4][2] = {{ -1, 0}, {1, 0}, {0, -1}, {0, 1}};
int s[110][110];
int dis[110][110];

void dijkstra ( int si, int sj )
{
	for ( int i = 0; i < n; i++ )
		for ( int j = 0; j < n; j++ )
			dis[i][j] = inf;
	dis[si][sj] = 0;
	//二维的距离
	priority_queue<pair<int, int>>que;
	//默认从大到小 第一关键字先于第二关键字
	que.push ( make_pair ( 0, si * n + sj ) );
	while ( !que.empty() )
	{
		pair<int, int>p = que.top();
		que.pop();
		int i = p.second / n;
		int j = p.second % n;
		//一维二维转换
		for ( int d = 0; d < 4; d++ )
		{
			int ti = i + dir[d][0];
			int tj = j + dir[d][1];
			if ( ti < 0 || ti >= n || tj < 0 || tj >= n ) continue;
			if ( dis[ti][tj] > dis[i][j] + s[ti][tj] )
			{
				dis[ti][tj] = dis[i][j] + s[ti][tj];
				que.push ( make_pair ( -dis[ti][tj], n * ti + tj ) );
				//小的优先取出 存负
			}
		}
	}
}

int main()
{

	while ( ~scanf ( "%d", &n ) )
	{
		for ( int i = 0; i < n; i++ )
			for ( int j = 0; j < n; j++ )
			{
				scanf ( "%d", &s[i][j] );
				if ( s[i][j] == -1 )
				{
					si = i, sj = j;
					s[i][j] = 0;
				}
				else if ( s[i][j] == -2 )
				{
					ei = i, ej = j;
					s[i][j] = 0;
				}
			}
		dijkstra ( si, sj );
		printf ( "%d\n", dis[ei][ej] );
	}
	return 0;
}

资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 在游戏开发领域,一款热门游戏引擎源码的开源无疑是极具影响力的事件。《PlayerUnknown’s Battlegrounds》(简称PUBG,即绝地求生)作为全球广受欢迎的大逃杀类型游戏,其引擎源码的开源为开发者们带来了极为珍贵的学习与研究资源。本文将深入探讨PUBG引擎源码开源的意义,助力开发者更好地掌握和运用这些源码。 要理解PUBG游戏背后的开发基础,需先了解其所采用的引擎。PUBG基于虚幻引擎(Unreal Engine)开发,该引擎由Epic Games打造,凭借强大的图形渲染、物理模拟以及实时编辑工具等优势,广泛应用于众多游戏及虚拟现实项目。PUBG引擎源码的开源,使开发者能够深入了解虚幻引擎在大规模多人在线游戏开发中的具体应用细节,这对于优化游戏性能、提升用户体验具有极其重要的价值。 开源的PUBG引擎源码可能涵盖以下关键内容: 图形渲染:PUBG源码可能详细展示了地形、建筑、光照、阴影以及粒子效果的处理算法。这些内容对于开发者学习高级图形技术至关重要,通过研究源码,开发者能够掌握在复杂大规模场景中实现高效渲染的方法。 网络同步:在网络同步方面,PUBG源码可能揭示了其独特的优化策略,如延迟补偿、状态同步以及数据压缩等技术。这些技术对于解决多人在线游戏中的网络问题具有重要参考价值,能够帮助其他开发团队优化网络性能,提升游戏的流畅度和稳定性。 物理引擎:PUBG的物理引擎负责处理游戏中的碰撞检测、物体运动和交互。源码开源后,开发者可以学习如何构建更真实的物理模拟,从而增强游戏的真实感和沉浸感。 AI系统:游戏中的AI系统控制着敌人的行为和策略。PUBG的AI源码可能会展示如何设计智能敌人,以及如何实现大规模玩家群体的动态平衡。这对于开发者设计更具挑战性和趣味性的游戏AI具
绝地求生:易语言 全套加速器源码【更新日期:2018年1月10日】 使用说明: 用FTP将后台文件用二进制上传到网站根目录后安装网站 安装好后登陆后台添加产品 然后把激活码输入都源码里,产品ID,通信秘钥在后台添加产品后获取,并输入 然后搜索HTTP 把所有HTTP网址改成自己的域名即可 后台设置公告(重要)不设置会导致软件无法启动 格式为 公告内容||网址 添加游戏: 在M文件夹中 route就是存放游戏路由表的地方 打开 1||英雄联盟||http://域名/m/route/yxlm.txt||http://域名/m/route/1.png||0 序号||游戏名称||游戏路由表地址||游戏LOGO地址||后面的0代表国内游戏,1则为国外游戏 路由表格式参考:add 1.207.140.0 mask 255.255.255.0 IP METRIC default IF IFZ add 14.17.12.0 mask 255.255.255.0 IP METRIC default IF IFZ add 14.17.13.0 mask 255.255.255.0 IP METRIC default IF IFZ add 14.17.14.0 mask 255.255.255.0 IP METRIC default IF IFZ 线路添加:网游加速的线路分别存放在这两个文件里面 国内跟国外,格式为 线路名称||IP||用户名||密码 网络加速则存放在 编写好节点文档后,采用附赠的加密工具加密后上传到网站根目录即可 充值系统 注:后台必须把充值卡位数改成10位以内,太多字符会导致充值出错! 1.首先打开注册个账号http://www.1ka123.com/dashboard/index 2.打开雷盾的后台 获取客户ID 3.地址 高级=》在线售卡 4. 这里写上客户ID 然后点编辑 刷新 5.获取提卡数据 6.在易卡上面 找到商品/分类的商品列表 点编辑 7.平台对接写雷盾 对接密匙 写提卡数据 然后点保存这样子就可以实现无卡的时候自动补卡了 软件对接: 打开源码目录下的扫码支付模块 按下列格式写入你的卡类信息 比如我这里增加月卡 修改完即可收款实现自动充值
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值