蛇形填数
时间限制(普通/Java) :
5000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 1058 测试通过 : 398
总提交 : 1058 测试通过 : 398
比赛描述
在n×n方阵里填入1,2,…, n×n,要求填成蛇形(见样例)。
输入
输入正整数n,n≤64。
输出
输出蛇形矩阵,要求每个数格式宽度为5、右对齐。
样例输入
4
样例输出
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
题目来源
刘汝佳《算法竞赛入门经典》
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int n,i,j,k,dir;
int a[64][64]={0};
cin>>n;
i = 0;
j = n-1;
dir = 0;
for(k=1;k<=n*n;++k){
a[i][j] = k;
switch(dir){
case(0)://下
if(i+1>n-1 || a[i+1][j]){
--j;
dir = 1;
}else{
++i;
}
break;
case(1)://左
if(j-1<0 || a[i][j-1]){
--i;
dir = 2;
}else{
--j;
}
break;
case(2)://上
if(i-1<0 || a[i-1][j]){
++j;
dir = 3;
}else{
--i;
}
break;
case(3)://右
if(j+1>n-1 || a[i][j+1]){
++i;
dir = 0;
}else{
++j;
}
break;
}
}
cout<<right;
for(i=0;i<n;++i){
for(j=0;j<n;++j){
cout<<setw(5)<<a[i][j];
}
cout<<endl;
}
}