1520C - Not Adjacent Matrix

\(1 \sim n^2\)放置在\(n\times n\)的棋盘当中,要求当前格子中的数字与其四连通的格子中的数字不相邻。

考虑将当前格子染成黑色,与其四连通的格子染成白色,即下标\((i,j)\)的格子,当\(i+j\)为偶数时染成黑色,\(i+j\)为奇数时染成白色,则颜色不同的格子中的数字不能相邻。

按从左至右,从上至下的顺序,优先安排黑色格子中的数字,黑色格子安排完毕后再安排白色格子中的数字,数字的安排顺序为\(1\sim n^2\)

\(n=3\)的构造情况如下:

\[\begin{pmatrix} 1 & 6 & 2\\ 7 & 3 & 8\\ 4 & 9 & 5\\ \end{pmatrix} \]

注意点

\(n\)\(2\)的情况无解。

const int N=110;
int g[N][N];
int n;
 
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        cin>>n;
 
        int idx=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                if((i+j) % 2 == 0)
                    g[i][j]=++idx;
 
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                if((i+j) % 2)
                    g[i][j]=++idx;
 
        if(n == 2) puts("-1");
        else
        {
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    if(j == n-1) cout<<g[i][j]<<endl;
                    else cout<<g[i][j]<<' ';
        }
    }
    //system("pause");
    return 0;
}
posted @ 2021-05-24 12:53  Dazzling!  阅读(43)  评论(0编辑  收藏  举报