游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5278|回复: 6

delphi数组问题(好象和数学有关)

[复制链接]

16

主题

115

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
发表于 2006-2-9 21:08:00 | 显示全部楼层 |阅读模式
有N个数,例如N=25

编程实现:

1    2    3    4   5
16  17  18  19  6
15  24  25  20  7
14  23  22  21  8
13  12  11  10  9

把陀螺状的N个数存到2维数组中

有人数据结构学的好的吗?

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-2-10 11:11:00 | 显示全部楼层

Re:delphi数组问题(好象和数学有关)

用c++写的,没有测试。
int h,w, rw[2], rh[2], sh, sw , c, ch, cw; int a[w][h]={0}; c=h*w;
rw[0] = rh[0] = 0; rw[1] = w-1; rh[1] = h-1; cw=ch=sw=-1;sh=1;
for (int k=0; k<c; k++) {
   if (cw==rw[0]) {sh=-sh; rc[0]++; }
   if (cw==rw[1]) {sh=-sh; rc[1]--; }

   if (ch==rh[0]) {sw=-sw; rw[0]++; }
   if (ch==rh[1]) {sw=-sw; rw[1]--; }
  
   cw+=sw; ch+=sh;
   cw=max(cw,rw[0]);   cw=min(cw,rw[1]);
   ch=max(ch,rh[0]);   ch=min(ch,rw[1]);

   a[ch*w+cw]=k;
}

16

主题

115

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
 楼主| 发表于 2006-2-10 13:16:00 | 显示全部楼层

Re:delphi数组问题(好象和数学有关)

我大体看了一下,好象对,我在试试

谢谢,congy兄,呵呵

4

主题

76

帖子

78

积分

注册会员

Rank: 2

积分
78
QQ
发表于 2006-2-10 18:34:00 | 显示全部楼层

Re:delphi数组问题(好象和数学有关)

你的这个N是怎么取值的?
N是某个数的平方还是任意数啊?

16

主题

115

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
 楼主| 发表于 2006-2-12 16:07:00 | 显示全部楼层

Re:delphi数组问题(好象和数学有关)

N是任意数,

请问,下面我做的对不对哦?
-------------------------------

var
  Datas:array of array of Integer;

procedure Fill2DArray(N, RowCount, ColCount: Integer);
type
  TDir=(dirRight,dirDown,dirLeft,dirUp);
const
  Dirs:array[TDir,0..1]of Integer=((0,1),(1,0),(0,-1),(-1,0));
var
  i,x,y,x1,y1,c:Integer;
  MyDir:TDir;
  b:Boolean;
begin
  if RowCount or ColCount=0 then exit;
  MyDir:=dirRight;
  for y:=0 to Pred(RowCount) do
    for x:=0 to Pred(ColCount) do
      Datas[y,x]:=0;
  x:=0; y:=0;
  i:=1;
  while (i<=N) and (Datas[y,x]=0) do
  begin
    Datas[y,x]:=i;
    c:=0;
    while c<4 do
    begin
      x1:=x+Dirs[MyDir][1];
      y1:=y+Dirs[MyDir][0];
      if (x1>=0) and (y1>=0) and (x1<ColCount) and (y1<RowCount) then
      begin
        if Datas[y1,x1]=0 then
        begin
          x:=x1;
          y:=y1;
          break;
        end
        else
          if MyDir=dirUp then
            MyDir:=dirRight
          else
            MyDir:=Succ(MyDir);
      end
      else
        if MyDir=dirUp then
          MyDir:=dirRight
        else
          MyDir:=Succ(MyDir);
      Inc(c);
    end;
    Inc(i);
  end;
end;

使用例子:
  SetLength(Datas,SpinEdit3.Value,SpinEdit2.Value);
  Fill2DArray(SpinEdit1.Value,SpinEdit3.Value,SpinEdit2.Value);  

4

主题

76

帖子

78

积分

注册会员

Rank: 2

积分
78
QQ
发表于 2006-2-16 12:12:00 | 显示全部楼层

Re:delphi数组问题(好象和数学有关)

你说N是任意数 那么你的排列是按什么规律。当N=25时,为什么情况是这样
1    2    3    4   5
16  17  18  19   6
15  24  25  20   7
14  23  22  21   8
13  12  11  10   9
而不是
21 22 23 24  25
20   7   8  9  10
19   6   1  2  11
18   5   4  3  12
17 16 15 14  13
这样呢

16

主题

115

帖子

120

积分

注册会员

Rank: 2

积分
120
QQ
 楼主| 发表于 2006-2-21 19:09:00 | 显示全部楼层

Re:delphi数组问题(好象和数学有关)

那样都行,下面的也行,我是在讨论这个算法,怎样编才简单,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 11:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表