因此存在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数组的方法的一小部分,其中一些单元被阻挡并找到两个单元之间的路径。我有代码工作的那部分但是这个,更简单的一个证明麻烦:|
答案 0 :(得分:0)
Alrite家伙。这是非常微不足道的事情。在if条件集中,它在最后保持输入else,因此额外的不必要的单元格被设置为1.我通过使用在赋值后设置为1的变量并且如果它未设置为1来修复它,然后执行else。现在好了。谢谢:))