0
檢查相鄰小區的代碼爲棋盤每個棋子B
黑色和W
爲白色 ,其中W
和B
不應共享相同的邊緣。錯誤而在2D陣列
例子:
WBWB
BWBW
WBWB
BWBW
我的代碼是:
#include <iostream>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
char chess[4][4];
for (int i = 0;i<n;i++)
for (int j = 0;j<m;j++)
cin >> chess[i][j];
for (int i = 0;i<n;i++)
for (int j = 0;j<m;j++)
{
if (chess[i][j] == '.')
{
if (chess[i - 1][j] == 'W' || chess[i + 1][j] == 'W' || chess[i][j + 1] == 'W' || chess[i][j - 1] == 'W')
chess[i][j] = 'B';
else
chess[i][j] = 'W';
}
}
for (int i = 0;i<n;i++)
{
for (int j = 0;j<m;j++)
cout << chess[i][j];
cout << endl;
}
system("pause");
return 0;
}
的問題是,當我運行這段代碼的輸出是:
WBWB
BWBW
BBWB
WBBW
我調試它,並chess[2][-1]
平等到W
,它超出了範圍,所以它應該是垃圾。
我明白了未定義的行爲。但有沒有更容易的方法來進行邊界檢查? 使用If語句會使代碼太長 –