所以我有一个正方形的二维数组。尺寸将是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