したがって、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 になります
以下にそのコードを書きましたが、いくつかの行で余分な 1 を取得しています... if 条件がいくつかの場所でめちゃくちゃになっているようです。行列を2乗したサイズに変換するため、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 配列を作成し、2 つのセル間のパスを見つける方法の小さな部分です。私はその部分で動作するコードを持っていますが、これはより単純なものは面倒です:|