我想问一个作业问题.我知道有些人对这类问题的答案犹豫不决,但请相信我,我花了很多时间完成这项工作,并尽我所能.如果可以,请帮忙.
问题是网格格式的流氓式AI游戏,其中一个测试用例是如下地图:
~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~
~~ g** d *~~
~~ ** * * ~~
~~ ** *** ~~
~~ ** d ~~
~~ ** < ~~
~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
g =金,d =炸药,〜=水,*=墙,<是我们的代理人,朝左.
规则是代理人不能进入水中,也不能进入隔离墙.它只能移动到空方格或广场上以拾取炸药.然后它可以用炸药炸开墙壁.一旦使用炸药,就不能再使用它.最终目标是找到黄金并捡起它.代理只能上下或左右移动.没有对角线移动.
由于文本格式化,在对角线方向的墙壁之间可能会出现一些额外的空格,但没有任何空格.
到目前为止,我已经使用Depth First Search来探索地图.(这个示例地图非常小,有一些很大).我还使用A*搜索计划路径,曼哈顿距离作为启发式.
这张地图有点棘手的是,A*搜索无法找到通往目标的路径,唯一的解决方案是首先拿起代理附近的炸药,然后将第二堵墙炸到金的右边,然后向右走,拿起第二个炸药,然后回去炸掉金矿右边的最后一道墙,然后拿出金币.
我遇到了以下问题:
如果有人有任何建议或好建议,请赐教.我已经睡了两天了......
谢谢阅读.
[编辑30/05]好吧,我设法使用一个技巧来解决上面的地图.基本上从黄金向后搜索,并假设第一层邻近墙壁是否清晰,看看代理商是否可以移动到那里,也可以从那里拿起任何炸药.如果两者都是,那么这是一条通路.
但是,看下面的地图,我无言以对.....有人能帮忙吗?
一个.
~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~
~g*** *** ~~
~*** d**~~
~** *d~~
~* ^ *~~
~** **~~
~d** **d~~
~ d** **d ~~
~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
B.
~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~
~~ ~~
~~ ^ ~~
~~ *** ~~
~~ …Run Code Online (Sandbox Code Playgroud) 我试图在我的Api控制器测试中模拟User.Identity.
这是我的api方法:
[Route(Urls.CustInfo.GetCustomerManagers)]
public HttpResponseMessage GetCustomerManagers([FromUri]int groupId = -1)
{
var user = User.Identity.Name;
if (IsStaff(user) && groupId == -1)
{
return ErrorMissingQueryStringParameter;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我按照这篇文章中的建议:在单元测试中设置ApiController的User属性来设置User属性.
这是我的测试:
[TestMethod]
public void User_Without_Group_Level_Access_Call_GetCustomerManagers_Should_Fail()
{
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("Bob", "Passport"), new[] {"managers"});
var response = m_controller.GetCustomerManagers();
Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
}
Run Code Online (Sandbox Code Playgroud)
但是在运行测试时,User属性始终为null.
我甚至尝试在调用User.Identity之前移动用于将CurrentPrincipal设置为api方法的行,但它仍然为null.
我究竟做错了什么?如果这种方法不适用于web api 2,那么模拟/模拟User属性的最佳方法是什么?
谢谢!
我理解minimax和alpha-beta修剪的基础知识.在所有文献中,他们谈论最佳情况的时间复杂度是O(b ^(d/2)),其中b =分支因子,d =树的深度,基本情况是所有首选节点都是首先扩大.
在我的"最佳案例"的例子中,我有一个4级的二叉树,所以在16个终端节点中,我需要扩展最多7个节点.这与O(b ^(d/2))有何关系?
我不明白他们是怎么来到O(b ^(d/2)).
拜托,有人可以向我解释一下吗?吃了很多!