0

所以有一个 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 阵列的方法的一小部分,其中一些单元被阻塞并找到两个单元之间的路径。我有用于该部分的代码,但是这个更简单的代码被证明很麻烦:|

4

1 回答 1

0

提醒各位。这是一件非常微不足道的事情。在一组 if 条件中,它最后一直输入 else 一个,因此额外的不必要的单元格被设置为 1。我通过使用一个在赋值后设置为 1 的变量来修复它,如果它没有设置为 1 , 然后执行 else。现在很好。谢谢 :)

于 2012-10-07T07:51:32.233 回答