我给出了一个带有1和0的nXn网格,并且如果0居住在单元格中,我只能向上或向右移动。我需要找到从左下角到达右上角的所有可能方法。为了实现这一点,我使用了一个在(0,0)处初始化的对象(Bot
),其唯一的行为是向右看,而正好在它上面的单元格;如果它是0,那么它会在该可用单元格中创建一个新的Bot。
那么我如何实现这种创造性行为而不必再次明确地实例化该类呢?
到目前为止(map
是一个二维数组):
using System;
namespace brancher
{
public class Bot
{
public int row = 0;
public int col = 0;
public void startRoutine ()
{
if (row != 3 && col != 3) {
if (Globals.map [row, col + 1] == 0) {
// This isn't right
Bot a = new Bot (row, col + 1);
}
if (Globals.map [row + 1, col] == 0) {
// This isn't right
Bot b = new Bot (row + 1, col);
}
}
if (row == 3 && col == 3) {
Globals.count++;
}
}
public Bot (int x, int y)
{
row = x;
col = y;
startRoutine ();
}
}
}
编辑:这不是家庭作业。这是一个挑战。修正了等号和标题。
答案 0 :(得分:0)
public class Bot
{
public int row = 0;
public int col = 0;
public void startRoutine()
{
if (row != 3 && col != 3)
{
if (Globals.map[row, col + 1] == 0)
{
// Simply update the data, no need to create a new class
this.Move(row, col + 1);
}
if (Globals.map[row + 1, col] == 0)
{
// Simply update the data, no need to create a new class
this.Move(row + 1, col);
}
}
if (row == 3 && col == 3)
{
Globals.count++;
}
}
private void Move(int x, int y)
{
row = x;
col = y;
startRoutine();
}
public Bot(int x, int y)
{
row = x;
col = y;
startRoutine();
}
}