试试下面的代码来创建你的游戏。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
object[,] input = {
{
new object[] { 0, -1, -1, 1, 6}, //index, left, up, right, down
new object[] { 1, 0, -1, -1, 7}, //index, left, up, right, down
new object[] { 2, -1, -1, 3, 8}, //index, left, up, right, down
new object[] { 3, 2, -1, 4, 9}, //index, left, up, right, down
new object[] { 4, 3, -1, -1, 10}, //index, left, up, right, down
new object[] { 5, -1, -1, -1, 11} //index, left, up, right, down
},
{
new object[] { 6, -1, 0, 7, -1}, //index, left, up, right, down
new object[] { 7, 6, 1, -1, 13}, //index, left, up, right, down
new object[] { 8, -1, 2, 9, 14}, //index, left, up, right, down
new object[] { 9, 8, 3, -1, -1}, //index, left, up, right, down
new object[] {10, -1, 4, 11, -1}, //index, left, up, right, down
new object[] {11, 10, 5, -1, 17} //index, left, up, right, down
},
{
new object[] {12, -1, -1, 13, 19}, //index, left, up, right, down
new object[] {13, 12, 7, 14, 20}, //index, left, up, right, down
new object[] {14, 13, 8, 15, 21}, //index, left, up, right, down
new object[] {15, 14, -1, -1, 22}, //index, left, up, right, down
new object[] {16, -1, -1, 17, 23}, //index, left, up, right, down
new object[] {17, 16, 11, -1, 24} //index, left, up, right, down
},
{
new object[] {18, -1, 12, 19, 24}, //index, left, up, right, down
new object[] {19, 18, 13, -1, 25}, //index, left, up, right, down
new object[] {20, -1, 14, 21, 26}, //index, left, up, right, down
new object[] {21, 20, 15, -1, 27}, //index, left, up, right, down
new object[] {22, -1, 16, 23, 28}, //index, left, up, right, down
new object[] {23, 22, 17, -1, 29} //index, left, up, right, down
},
{
new object[] {24, -1, 18, 25, -1}, //index, left, up, right, down
new object[] {25, 24, 19, 26, -1}, //index, left, up, right, down
new object[] {26, -1, 20, 27, -1}, //index, left, up, right, down
new object[] {27, 26, 21, 28, -1}, //index, left, up, right, down
new object[] {28, 27, 22, 29, -1}, //index, left, up, right, down
new object[] {29, 28, 23, -1, -1} //index, left, up, right, down
},
};
cell game = new cell(input);
}
}
public class cell
{
public static cell[,] board = new cell[5, 6];
public int index { get; set; } //row number * 6 + col
public int row { get; set;}
public int col { get; set;}
public cell up { get; set; }
public cell down { get; set; }
public cell left { get; set; }
public cell right { get; set; }
public cell() { }
public cell(object[,] input)
{
int cellNumber = 0;
int boardRow = 0;
int boardCol = 0;
int cellRow = 0;
int cellCol = 0;
for (int row = 0; row < 5; row++)
{
for (int col = 0; col < 6; col++)
{
board[row, col] = new cell();
}
}
for (int row = 0; row < 5; row++)
{
for (int col = 0; col < 6; col++)
{
object[] items = (object[])input[row, col];
cellNumber = (int)items[0];
boardRow = cellNumber/6;
boardCol = cellNumber % 6;
board[boardRow, boardCol].index = cellNumber;
board[boardRow, boardCol].row = row;
board[boardRow, boardCol].col = col;
cellNumber = (int)items[1];
cellRow = cellNumber/6;
cellCol = cellNumber % 6;
if (cellNumber == -1)
{
board[boardRow, boardCol].left = null;
}
else
{
board[boardRow, boardCol].left = board[cellRow, cellCol];
}
cellNumber = (int)items[2];
cellRow = cellNumber/6;
cellCol = cellNumber % 6;
if (cellNumber == -1)
{
board[boardRow, boardCol].up = null;
}
else
{
board[boardRow, boardCol].up = board[cellRow, cellCol];
}
cellNumber = (int)items[3];
cellRow = cellNumber/6;
cellCol = cellNumber % 6;
if (cellNumber == -1)
{
board[boardRow, boardCol].right = null;
}
else
{
board[boardRow, boardCol].right = board[cellRow, cellCol];
}
cellNumber = (int)items[4];
cellRow = cellNumber/6;
cellCol = cellNumber % 6;
if (cellNumber == -1)
{
board[boardRow, boardCol].down = null;
}
else
{
board[boardRow, boardCol].down = board[cellRow, cellCol];
}
}
}
}
}
}
(1)看起来你的图是不加权的,所以你可以使用BFS,在这种情况下,它比Dijkstra的算法更简单和更高效。(2)对于现代机器而言,90x90矩阵几乎不成问题。 (3)如果你使用'double'作为权重,很多语言都可以使用无穷大的值。在java中,['Double.POSITIVE_INFINITY'](http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#POSITIVE_INFINITY)(4)你总是可以使用邻接表 – amit