永发信息网

急求!C语言的蛇形方阵!

答案:3  悬赏:80  手机版
解决时间 2021-01-30 05:56
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列的蛇形方阵,
求思路,最好附上代码(最好有注释)!
多谢了!
最佳答案
#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"); 
}  
}
全部回答
这个有点难
#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
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯