输入一个N,将1,2~NxN以蛇形方式保存到N阶矩阵。
如N=3
1 3 4
2 5 8
6 7 9
n=4
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16
思路:我运用DFS深度搜索的定向搜索功能,将二维数组比作地图,坐标x,y走到指定位置,将特定位置赋值。最后输出数组
#include<iostream>
void setSnake(int x, int y, int k);
void print();
using namespace std;
int snake[500][500];
int n;
int main()
{
cin>>n;
setSnake(0,0,1);
print();
}
//设置蛇形数组
void setSnake(int x, int y, int k)
{
snake[x][y]=k;
if(x<0||x>=n||y<0||y>=n||k==n*n)
{
return;
}
if(y==0)
{
if(x==n-1)
{
snake[++x][y]=(++k);
setSnake(--x,++y,++k);
}
else
{
snake[++x][y]=(++k);
setSnake(--x,++y,++k);
}
}
if(x==0)
{
if(y==n-1)
{
snake[++x][y]=(++k);
setSnake(++x,--y,++k);
}
else
{
snake[x][++y]=(++k);
setSnake(++x,--y,++k);
}
}
if((x+y)%2==0)
{
setSnake(++x,--y,++k);
}
else
{
setSnake(--x,++y,++k);
}
if(x==n-1)
{
snake[x][++y]=(++k);
setSnake(--x,++y,++k);
}
if(y==n-1)
{
snake[++x][y]=(++k);
setSnake(++x,--y,++k);
}
}
//输出蛇形数组
void print()
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
cout<<snake[i][j]<<" ";
}
cout<<endl;
}
}