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 になります

以下にそのコードを書きましたが、いくつかの行で余分な 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 つのセル間のパスを見つける方法の小さな部分です。私はその部分で動作するコードを持っていますが、これはより単純なものは面倒です:|

4

1 に答える 1

0

アルライトの皆さん。とても些細なことでした。if条件のセットで、最後にelseを入れ続けていたので、余分な不要なセルが1に設定されていました.代入後に1に設定される変数を使用し、1に設定されていない場合に修正しました. 、次にelseが実行されます。今は大丈夫です。ありがとう :)

于 2012-10-07T07:51:32.233 に答える