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