蛇形矩阵 求解
pascal吧
全部回复
仅看楼主
level 1
桀丶无双 楼主
从输入文件中读入一个数字N(N<=20),在输出文件中输出一个NxN的蛇形矩阵。
     输出要求:数字与数字之间用一个空格进行间隔。
样例输入(snake.in):
4    
样例输出(snake.out):
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7

2011年05月29日 07点05分 1
level 1
桀丶无双 楼主
来的各位给点建议,可以用2维数组解吧
2011年05月29日 07点05分 2
level 1
program pr_1;
const   MX = 21;   x : array[0..3] of integer = (0,1,0,-1);   y : array[0..3] of integer = (1,0,-1,0);var   i,j : integer;   n : integer;   flag : array[0..MX,0..MX] of boolean;   ans : array[0..MX,0..MX] of integer;   nowx,nowy,face,nextx,nexty : integer;procedure Init;begin   for i := 0 to MX do   for j := 0 to MX do   flag[i,j] := false;   nowx := 1;   nowy := 1;   face := 0;end;function Isin(x,y:integer) : boolean;begin   Isin := (x >= 1) and (y >= 1) and (x <= n) and (y <= n) and (not flag[x,y]);end;begin   Init;   read(n);
   flag[1,1] := true;   ans[1,1] := 1;   for i := 2 to n*n do   begin   nextx := nowx + x[face];   nexty := nowy + y[face];
   while (not Isin(nextx,nexty)) do   begin   inc(face);   face := face mod 4;   nextx := nowx + x[face];   nexty := nowy + y[face];   end;   nowx := nextx;   nowy := nexty;   ans[nowx,nowy] := i;   flag[nowx,nowy] := true;   end;   for i := 1 to n do   begin   for j := 1 to n do   write(ans[j,i],' ');   writeln('');   end;end.
2011年06月03日 02点06分 3
level 7
var
   i,j,k,n,t,l1,l2:integer;
   aa:array [1..100,1..100] of integer;
   bb:array[0..3,1..2] of integer;
begin
   write('Num: ');
   readln(n);
   fillchar(aa,sizeof(aa),0);
   bb[0,1]:=1;   bb[0,2]:=0;
   bb[1,1]:=0;   bb[1,2]:=1;
   bb[2,1]:=-1;   bb[2,2]:=0;
   bb[3,1]:=0;   bb[3,2]:=-1;
   j:=1; k:=1; t:=0;
   aa[1,1]:=1;
   for i:=2 to n*n do
     begin
       l1:=j+bb[t,1];
       l2:=k+bb[t,2];
       if (l1=0) or (l1=n+1) or (l2=0) or (l2=n+1) then t:=(t+1) mod 4
       else   if aa[l1,l2]<>0 then t:=(t+1) mod 4;
       j:=j+bb[t,1];
       k:=k+bb[t,2];
       aa[j,k]:=i;
     end;
{输出数组中的内容}
   for i:=1 to n do
     begin
       for j:=1 to n do
         write(aa[i,j],' ');
       writeln;
     end;
end.
2011年06月03日 04点06分 4
level 1
你那个应该是逆时针的螺旋矩阵把
var a,b,t,x:integer; s:array[0..1000,0..1000]of integer;begin readln(x); for a:=1 to x do begin s[0,a]:=1; s[x+1,a]:=1; s[a,0]:=1; s[a,x+1]:=1; end; t:=1;a:=1;b:=1; while t<=x*x do begin s[a,b]:=t; if (s[a,b-1]<>0)and(s[a-1,b]<>0)and(s[a+1,b]=0)then a:=a+1 else if (s[a+1,b]<>0)and(s[a,b-1]<>0)and(s[a,b+1]=0)then b:=b+1 else if (s[a,b+1]<>0)and(s[a+1,b]<>0)and(s[a-1,b]=0)then a:=a-1 else b:=b-1; t:=t+1end; for a:=1 to x do begin for b:=1 to x do write(s[a,b]:5); writeln; end;end.
2016年01月16日 06点01分 10
1