用c#怎么编写一个螺旋数组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请高手指点

解决方案 »

  1.   

    http://blog.csdn.net/hcj2002/archive/2005/01/06/242380.aspx自己转换一下
      

  2.   

    public class Luoxuan
        {
            private int x;
            private int y;
            public int[,] group;        public Luoxuan(int x,int y)
            {
                this.x = x;
                this.y = y;            this.group = new int[x,y];
            }        public void Generate()
            {
                int value = 1;
                int intTime = 0;
                int i = 0;
                int j = i;            while(this.group[i, i] == 0)
                {
                    //left to right
                    for (i = intTime; j < y - intTime; j++)
                    {
                        this.group[i, j] = value ++ ;
                    }
                    j--;
                    i++;                //up to down
                    for (; i < x - intTime; i++)
                    {
                        this.group[i, j] = value++;
                    }
                    i--;
                    j--;                //right to left
                    for (; j >= intTime; j--)
                    {
                        this.group[i, j] = value++;
                    }
                    j++;
                    i--;                //down to up
                    for (; i > intTime; i--)
                    {
                        this.group[i, j] = value++;
                    }
                    i++;
                    j++;                intTime++;
                }
            }
        }
      

  3.   

    问题解决,pigwebs(笑书神侠)的方法很不错,这里再次感谢!
      

  4.   

    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2007-9-3
     * Time: 22:35
     * 
     * To change this template use Tools | Options | Coding | Edit Standard Headers.
     */using System;class ArrTest
    {
    private static int p = 5;
    private static int[,] a = new int[p,p];
    private static int k = 1;
    private static int s;//此行赋值时动座标的开始值
    private static int m;//此方向圈数
    private static int n;//该行赋值个数

    static void Main()
    {
    int i = 0;
    int j = 0;
    int t = 1;//圈数,即不转弯的第几节
    int all = 0;


    while( all == 0 )
    {
    foreach(int x in a)
    {
    if(x == 0)
    {
    all = 0;
    break;
    }
    else
    {
    all = 1;
    }
    }
    m = (t-1)/4+1;
    getValue(ref i,ref t);
    t++;
    }
    for(i = 0;i < p;i++)
    {
    for(j = 0;j < p;j++)
    {
    Console.Write(" {0:d2} ",a[i,j]);
    }
    Console.WriteLine();
    }
    }

    private static void getValue(ref int i,ref int t)
    {
    switch( t%4 )
    {
    case 1:
    n = p-2*(m-1);
    s = m - 1;
    for(i = s;i < s+n;i++)
    {
    a[m-1,i] = k++;
    //Console.WriteLine("a[{0},{1}]={2}",t/4,i,a[t/4,i]);
    }
    break;
    case 2:
    n = p-1-2*(m-1);
    s = m;
    for(i = s;i < s+n;i++)
    {
    a[i,p-m]=k++;
    //Console.WriteLine("a[{0},{1}]={2}",i,(18-t)/4,a[i,(18-t)/4]);
    }
    break;
    case 3:
    n = p-1-2*(m-1);
    s = p-1-m;;
    for(i = s;i > s-n;i--)
    {
    a[p-m,i]=k++;
    //Console.WriteLine("a[{0},{1}]={2}",(19-t)/4,i,a[(19-t)/4,i]);
    }
    break;
    case 0:
    n = p-2-2*(m-1);
    s = p-1-m;
    for(i = s;i > s-n;i--)
    {
    a[i,m-1]=k++;
    //Console.WriteLine("a[{0},{1}]={2}",i,(t-4)/4,a[i,(t-4)/4]);
    }
    break;
    }
    }
    }
    我自己写的,我是新手,你参考一下吧