啊哈算法炸弹人游戏----深度优先搜索与广度优先搜索

 1.问题描述:在炸弹人游戏中,你有一颗炸弹,该炸弹的威力是十字形的,即只能爆出上下左右型的火焰,且火焰不能穿墙,问应该将炸弹放到哪里炸弹才能杀死最多的小怪?(注:该位置必须是炸弹人能有初始位置走到的位置,毕竟炸弹人不能飞,墙或者小怪都能阻挡炸弹人的路径),现在游戏地图如下图所示,炸弹人的位置在(3,3)处。

2.解题思路:需要先将问题抽象出来,我们可以用一个  二维数组  来表示 游戏地图,用 *表示平地,炸弹人可以到,用#表示墙,用$表示小怪,炸弹人初始位置在(3,3),该问题的目标是搜索到地图中的一个点,该点处满足能炸死的小怪最多,所以我们首先需要知道炸弹放在某一位置 (x,y)处时,能炸死多少小怪;

所以,我们的首要目标就是抽象出地图,并得知地图上某点能炸死的小怪数量。

抽象出地图 容易,上面提到的二维数组即可;统计小怪数量,因为炸弹爆炸只能产生“十”字型火路,所以统计(x,y)放置炸弹威力只要统计 该点向上下左右移动(未碰到墙时)遇到的小怪数量即可

C++程序如下:

#include "iostream"
using namespace std;
#include "vector"
#include "string"

class game_boom//声明该类
{
public:
	void game_map();//构建地图
	int num_boom(int x, int y);//x,y为炸弹放置的位置
public:
	vector<string> map;//地图属性

};



//具象问题抽象化,抽象出来地图与人物;用#代表墙,用*代表空地,用$来代表怪物
//地图是一个平面,所以用一个二维数组来代替
void game_boom::game_map()
{
	string s0 = "#############";
	string s1 = "#$$*$$$#$$$*#";
	string s2 = "###*#$#$#$#$#";
	string s3 = "#*******#**$#";
	string s4 = "#$#*###*#$#$#";
	string s5 = "#$$*$$$*#*$$#";
	string s6 = "#$#*#$#*#*#*#";
	string s7 = "##$***$*****#";
	string s8 = "#$#*#$###*#$#";
	string s9 = "#***$#$$$*$$#";
   string s10 = "#$#*#$#$#*#$#";
   string s11 = "#$$*$$$#$*
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值