所以我有一個正方形的二維數組。尺寸將是nxn。該數組只包含零和1。更具體地說,它將包含n 1。我需要檢查所有的1是否在空間上「連接」。例如:檢查二維數組中的連接
0 0 0 0
1 1 1 0
0 0 0 1
0 0 0 0
這是無效的。對角線連接不計數。到目前爲止,我的代碼將檢查數組,但僅用於唯一的單個1。如果1被分成兩組,例如,我的支票就會錯過它。任何建議表示讚賞。 這裏是我到目前爲止的代碼:
int conected(char *stringptr)
{
int n=sqrt(strlen(stringptr));
int i=0;
int j=0;
int k=0;
char array2d[n][n];
for (j=0;j<n;j++) {
for (i=0;i<n;i++) {
array2d[j][i]=stringptr[k];
k++;
}
}
for (j=0;j<n;j++) {
for (i=0;i<n;i++) {
if (array2d[j][i]=='1') {
if (i==0 && j==0) {//special case for first element
if ((array2d[j][i+1]=='0') && (array2d[j+1][i]=='0')) {
return 0;
}
}
else if ((j==0) && (i!=(n-1))) {//top row
if ((array2d[j][i+1]=='0') && (array2d[j+1][i]=='0') && (array2d[j][i-1]=='0')) {
return 0;
}
}
else if ((j==0) && (i==(n-1))) {// right corner
if ((array2d[j+1][i]=='0') && (array2d[j][i-1]=='0')) {
return 0;
}
}
else if ((i==0) && (j!=(n-1))) { //left column
if ((array2d[j][i+1]=='0') && (array2d[j+1][i]=='0') && (array2d[j-1][i]=='0')) {
return 0;
}
}
else if ((i==(n-1)) && (j!=(n-1))) {// right column
if ((array2d[j][i-1]=='0') && (array2d[j+1][i]=='0') && (array2d[j-1][i]=='0')) {
return 0;
}
}
else if ((i==0) && (j==(n-1))) {//bottom left corner
if ((array2d[j][i+1]=='0') && (array2d[j-1][i]=='0')) {
return 0;
}
}
else if ((j==(n-1)) && (i!=(n-1))) {//bottom row
if ((array2d[j][i+1]=='0') && (array2d[j-1][i]=='0') && (array2d[j][i-1]=='0')) {
return 0;
}
}
else if ((j==(n-1)) && (i==(n-1))){ //bottom right corner
if ((array2d[j][i-1]=='0') && (array2d[j-1][i]=='0')) {
return 0;
}
}
else {
if ((array2d[j][i-1]=='0') && (array2d[j+1][i]=='0') && (array2d[j-1][i]=='0') && (array2d[j][i+1]=='0')) {
return 0;
}
}
}
}
}
return 1;
}
你是在位置(X,Y)如何做你認爲你可以開始 –
假設你如何把這一到C數組座標?現在你已經翻譯了符號,你如何確定是否有一個'1'相鄰你當前的位置?最後,你如何跟蹤一系列相鄰的'1'? – ObscureRobot