【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具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值