csharp高级练习题:优化寻路算法【难度:3级】:
想象一下游戏级别表示为包含玩家可以遍历的字段的二维数组.玩家可以通过列向上和横向向上移动. 4x4级别可能如下所示:
行
0 | __ | __ | __ | __ |
1 | __ | __ | PL | __ | PL =球员位置
2 | __ | __ | __ | __ |
3 | __ | __ | __ | __ |
0 1 2 3列
在此示例中,播放器位于行:1,列:2.
如上所述,您可以直接向上移动(向行:2,向列:2)或向侧移(例如向行:1,列:3),但永远不会向下移动.点击
好?好.结果
它变得更复杂;一些领域被阻止,玩家必须在他们周围导航(打赌你没想到那个?):
行
0 | __ |□□|□□| __ |
2 | __ | __ | __ | __ |
1 | __ | __ | PL |□□| □□=被阻挡的场地
3 |□□| __ | __ |□□|
0 1 2 3列
该死的那些讨厌的关卡设计师…他们已经要求你输入一些神奇的算法,可以检查一个给定的关卡是否可以击败,即从玩家的位置到最上一行至少有一条有效的路径.
一个无法获胜的关卡:
0 | __ | PL | __ | __ |
1 | __ | __ | __ | __ | "那真是太糟糕了!" - 球员
2 |□□|□□|□□|□□|
3 | __ | __ | __ | __ |
0 1 2 3
您的任务是编写一个函数,该函数将返回最后/最后一行中可到达字段的数量.
int GetNumberOfReachableFields(bool [] [] grid,int rows,int columns,int startRow,int startColumn)