【题目描述】
在n×n方阵里填入1,2,3,…,n×n1,2,3,…,n×n,要求填成蛇形。例如n=4 时方阵为:
【思路分析】
1、先确定最右上角的位置 a[1,n], 最右上角的数字 cnt=1
int x=1,y=n,cnt=1; //定义 最右上角的位置
a[x][y]=cnt; //最右上角 填写数字 1
2、 从最右上角沿 “向下——向左——向上——向右”填数字。只要填写的数字 cnt< n*n,就不断循环这4条线路填充。
3、 4条线路的特点
第1条线路:从上到下。 x +1 y 不变 如果 下一个元素是否为 0 且 x+1<=n,填写数字。
第2条线路: 从右到左 。 y-1 x 不变 如果 下一个元素是否为 0 且y-1>=1,填写数字。
第3条线路:从下到上 x -1 y 不变 如果 下一个元素是否为 0 且x-1>=1,填写数字。
第4条线路:从左到右 y +1 x 不变 如果 下一个元素是否为 0 且y+1<=n,填写数字
【源代码】
#include<iostream>
using namespace std;
int a[21][21]={};
int main()
{
int n;
cin>>n;
int x=1,y=n,cnt=1; //定义 最右上角的位置
a[x][y]=cnt; //最右上角 填写数字 1
while (cnt<n*n)
{
//从上到下 x +1 y 不变 测试下一个元素是否为 0 且 x+1<=n
while( x+1<=n && a[x+1][y]==0 ){
x++;
cnt++;
a[x][y]=cnt;
}
//从右到左 y-1 x 不变
while( y-1>=1 && a[x][y-1]==0 ){
y--;
cnt++;
a[x][y]=cnt;
}
//从下到上 x -1 y 不变
while( x-1>=1 && a[x-1][y]==0 ){
x--;
cnt++;
a[x][y]=cnt;
}
//从左到右 y +1 x 不变
while( y+1<=n && a[x][y+1]==0 ){
y++;
cnt++;
a[x][y]=cnt;
}
}
//输出矩阵
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++) cout<<a[i][j]<<" ";
cout<<endl; //输出一行后需要换行
}
return 0;
}
【视频讲解地址】