1 2 6 7 15 16
3 5 8 14 17 26
4 9 13 18 25 27
10 12 19 24 28 33
11 20 23 29 32 34
21 22 30 31 35 36
如上图,输入一个N,输出N行N列的蛇形方阵,
求思路,最好附上代码(最好有注释)!
多谢了!
急求!C语言的蛇形方阵!
答案:3 悬赏:80 手机版
解决时间 2021-01-30 05:56
- 提问者网友:我的未来我做主
- 2021-01-29 15:56
最佳答案
- 五星知识达人网友:行雁书
- 2021-01-29 16:49
#include
#define N 5
#define M 0
void main()
{
int x=0,y=0,b,k=1,i,j,w=1;
int s[N][N];
b = N*N;
s[0][0]=1;
for(i=2; i<=b; i++)
{
if((y == 0) && (x != (N-1)) && (x%2 == (0+M)%2))
{
x++;
k = 1;
w = 0;
}
if((x == 0) && (y != (N-1)) && (y%2 == (1+M)%2))
{
y++;
k = 0;
w = 0;
}
if(x == (N-1) && (y%2 == ((N%2+1)%2+M)%2))
{
y++;
k = 1;
w = 0;
}
if(y == (N-1) && (x%2 == (N%2+M)%2) && !( (x == N-1) && (y == N-1) ) )
{
x++;
k = 0;
w = 0;
}
if((w == 1) && (k == 1))
{
x--;
y++;
}
if((w == 1) && (k == 0))
{
x++;
y--;
}
s[x][y] = i;
w = 1;
}
for(i=0; i
{
for(j=0; j
{
printf("%d\t",s[i][j]);
}
printf("\n");
}
}
#define N 5
#define M 0
void main()
{
int x=0,y=0,b,k=1,i,j,w=1;
int s[N][N];
b = N*N;
s[0][0]=1;
for(i=2; i<=b; i++)
{
if((y == 0) && (x != (N-1)) && (x%2 == (0+M)%2))
{
x++;
k = 1;
w = 0;
}
if((x == 0) && (y != (N-1)) && (y%2 == (1+M)%2))
{
y++;
k = 0;
w = 0;
}
if(x == (N-1) && (y%2 == ((N%2+1)%2+M)%2))
{
y++;
k = 1;
w = 0;
}
if(y == (N-1) && (x%2 == (N%2+M)%2) && !( (x == N-1) && (y == N-1) ) )
{
x++;
k = 0;
w = 0;
}
if((w == 1) && (k == 1))
{
x--;
y++;
}
if((w == 1) && (k == 0))
{
x++;
y--;
}
s[x][y] = i;
w = 1;
}
for(i=0; i
for(j=0; j
printf("%d\t",s[i][j]);
}
printf("\n");
}
}
全部回答
- 1楼网友:雾月
- 2021-01-29 18:25
这个有点难
- 2楼网友:琴狂剑也妄
- 2021-01-29 16:55
#include "conio.h"
#include
#include
#define N 6
int mDir[4][2]={ {1,0},{-1,1},{0,1},{1,-1} }; //4个填充方向:左、左下、下、右上,顺序填充
void StepOn(int x,int y,int s[N][N],int len)
{ int i,j,d=0,n=0,begin=1;
while ( 1 )
{ if ( s[y][x]==0 )
{ n++; s[y][x]=n;
if ( begin ) begin=0; //起始点不计
else if ( (d==0||d==2) ) d=(d+1)%4; //如果当前方向是左或下,立即转向
}
else //不空
{ for ( i=0;i<4;i++ ) //顺序测试4个方向
if ( x+mDir[(d+i)%4][0]=0 && y+mDir[(d+i)%4][1]=0 ) //不能超出数组范围
if ( s[y+mDir[(d+i)%4][1]][x+mDir[(d+i)%4][0]]==0 ) //发现合法空位
{ d=(d+i)%4; x+=mDir[d][0]; y+=mDir[d][1]; break; } //修改当前坐标和行进方向
if ( i>=4 ) break; //4个方向都找不到空位,结束
}
}
}
void main()
{ int s[N][N]={0},i,j;
StepOn(0,0,s,N);
for ( i=0;i
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯