題目描述:
在n*n方陣裏填入1,2,...,n*n,要求填成蛇形。例如n=4時方陣爲:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
代碼如下:
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 100+1 //最大填100*100的方陣且下標從1開始
int map[MAXN][MAXN];
int main()
{
int x=1,y,n,number=1;
scanf("%d",&n);
y=n;
memset(map,0,sizeof(map)); //清零方陣同時做訪問標記
while(number<=n*n)
{
while(x!=n+1&&!map[x][y]) //循環結束時x已出界 由上到下
map[x++][y]=number++;
--x;
--y;
while(y!=0&&!map[x][y]) //循環結束時y已出界 由右到左
map[x][y--]=number++;
++y;
--x;
while(x!=0&&!map[x][y]) //循環結束時x已出界 由下到上
map[x--][y]=number++;
++x;
++y;
while(y!=n+1&&!map[x][y]) //循環結束時y已出界 由左到右
map[x][y++]=number++;
--y;
++x;
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=n;++j)
{
printf("%-6d",map[i][j]);
}
printf("\n");
}
return 0;
}