我很無聊,所以我創建了一個小型控制檯掃雷遊戲,並且在寫它的同時,我不得不在元素的大小*尺寸矩陣中找到元素的鄰居位置,一個保存大小值的變量。我不想返回鄰居元素的實際值,但他們的位置,以便我可以使用它作爲一個公共職能(否則客戶端可以看到地雷在哪裏:P)。查找矩陣中的鄰居位置
例如用於現場當量0和大小當量3函數應該返回{1,3,4}:
1 0 0 0 1 0
0 0 0 => 1 1 0
0 0 0 0 0 0
那麼,basicaly它看起來像這樣:
vector<int> adjecantPositions(int field, int size)
{
int row = field/size;
int col = field % size;
vector<int> result;
/*
1 0 0
1 0 0
1 0 0
*/
if (col > 0)
{
result.push_back(calcField(row, col-1, size));
if (row > 0)
result.push_back(calcField(row-1, col-1, size));
if (row < size - 1)
result.push_back(calcField(row+1, col-1, size));
}
/*
0 0 1
0 0 1
0 0 1
*/
if (col < size - 1)
{
result.push_back(calcField(row, col+1, size));
if (row > 0)
result.push_back(calcField(row-1, col+1, size));
if (row < size - 1)
result.push_back(calcField(row+1, col+1, size));
}
/*
0 1 0
0 0 0
0 1 0
*/
if (row > 0)
result.push_back(calcField(row-1, col, size));
if (row < size - 1)
result.push_back(calcField(row+1, col, size));
return result;
}
calcField( int,int,int)只是將座標轉換爲字段編號(row * size + col)。
這是一個快速的解決方案,但它不是優雅的,我敢打賭,有一些更好的方法來做到這一點。有任何想法嗎?
此代碼返回不正確的結果,但我看到你穿越前後場形成3x3矩陣......我不明白,我沒有想到這一點。 – schmrz 2009-11-05 11:56:25