nxn矩阵查找彼此相邻的单元格

时间:2012-10-07 07:40:49

标签: arrays matrix

因此存在nxn矩阵,其单元格从1到n ^ 2编号。为方便起见,我们需要4x4。

它的细胞将是

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

现在我需要找到相邻的单元格...对于1,它将是2和5,即水平和垂直连接,对于6,它将是2,5,7,10

所以这里的邻接矩阵将是16x16,而1的行将是 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0

我已经为它编写了下面的代码但是我在某些行中得到了额外的1 ...看起来if条件在某些地方搞砸了。有8种不同的类型,因为将矩阵转换为平方的大小。

#include<stdio.h>
int main()
{
int n;
printf("Enter order of matrix:\n");
scanf("%d", &n);
int arr[n][n];

int i, j;
for (i=0;i<n;i++)
    for (j=0;j<n;j++)
        arr[i][j]=0;    


int size=n*n;

int array[size][size];
int index[n][n];

for (i=0;i<size;i++)
{
    for (j=0;j<size;j++)
    {
        array[i][j]=0;
    }
}

//Getting adjacency details of maze or in this case array. The new array will be n2xn2 in size


int adjIndex;
for (i=0;i<n;i++)
{
    for (j=0;j<n;j++)
    {

        adjIndex=((i+1)*n-(n-(j+1)));
        index[i][j]=adjIndex;
    }
}

for (i=0;i<n;i++)
{
    for (j=0;j<n;j++)
    {

        printf(" %d ", index[i][j]);
    }
    printf("\n");
}




for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{

    if (i==0 && j==0)
    {

        array[index[i][j]-1][index[i][j]]=1;
        array[index[i][j]-1][index[i][j]+n-1]=1;

    }

    if (i==0 && j>0 && j<n-1)
    {           
        array[index[i][j]-1][index[i][j]]=1;
        array[index[i][j]-1][index[i][j]-2]=1;
        array[index[i][j]-1][index[i][j]+n-1]=1;    

    }

    if (i==0 && j==n-1)
    {
        array[index[i][j]-1][index[i][j]-2]=1;
        array[index[i][j]-1][index[i][j]+n-1]=1;


    }

    if (j==0 && i > 0 && i < n-1)
    {   
        array[index[i][j]-1][index[i][j]]=1;
        array[index[i][j]-1][index[i][j]+n-1]=1;
        array[index[i][j]-1][index[i][j]-n-1]=1;

    }


    if (j==0 && i==n-1)
    {
        array[index[i][j]-1][index[i][j]]=1;
        array[index[i][j]-1][index[i][j]-n-1]=1;

    }

    if (i==n-1 && j>0 && j<n-1)
    {
        array[index[i][j]-1][index[i][j]]=1;
        array[index[i][j]-1][index[i][j]-2]=1;
        array[index[i][j]-1][index[i][j]-n-1]=1;


    }

    if (i==n-1 && j==n-1)
    {
        array[index[i][j]-1][index[i][j]-2]=1;
        array[index[i][j]-1][index[i][j]-n-1]=1;


    }

    if (j==n-1 && i>0 && i<n-1)
    {
        array[index[i][j]-1][index[i][j]-2]=1;
        array[index[i][j]-1][index[i][j]+n-1]=1;
        array[index[i][j]-1][index[i][j]-n-1]=1;

    }


    else
    {
        array[index[i][j]-1][index[i][j]-n-1]=1;
        array[index[i][j]-1][index[i][j]-2]=1;
        array[index[i][j]-1][index[i][j]]=1;
        array[index[i][j]-1][index[i][j]+n-1]=1;

    }

}
}

for (i=0;i<size;i++)
{
for (j=0;j<size;j++)
    {
        printf(" %d ", array[i][j]);
    }
printf("\n");
}       




}

我确信这是微不足道的。这是制作nxn数组的方法的一小部分,其中一些单元被阻挡并找到两个单元之间的路径。我有代码工作的那部分但是这个,更简单的一个证明麻烦:|

1 个答案:

答案 0 :(得分:0)

Alrite家伙。这是非常微不足道的事情。在if条件集中,它在最后保持输入else,因此额外的不必要的单元格被设置为1.我通过使用在赋值后设置为1的变量并且如果它未设置为1来修复它,然后执行else。现在好了。谢谢:))