用递归求螺旋矩阵

今日,下午去上地附近一家公司面试。

笔试部分,太基础而好多写不出具体的东西。

上机部分,让写一个螺旋矩阵。想到院子里有一些脑细胞发达的人总结了什么公式,绞尽脑汁总结不出来,也回忆不起来,多重循环的那种,我有没那么好的想象力去想象,于是就用递归弄了个。 

  1 public class SpiralMatrix

 2     {
 3         private int[,] _SpiralMatrix;
 4         private int _N;
 5 
 6         public SpiralMatrix(int n)
 7         {
 8             _SpiralMatrix = new int[n, n];
 9             _N = n;
10         }
11         /// <summary>
12         /// 递归算法
13         /// </summary>
14         /// <param name="start">start:矩阵开始的位置,如为0表示矩阵[0,0]元素</param>
15         /// <param name="num">矩阵的维数</param>
16         /// <param name="begin">起始数字</param>
17         public void Computer(int start,int num,int begin)
18         {
19             if (start == num)//输入为偶数时
20             {
21                 return;
22             }
23             else if (start == num - 1)//输入为奇数时
24             {
25                 _SpiralMatrix[start, num - 1= begin;
26                 return;                
27             }
28             else
29             {
30                 for (int i = start; i < num; i++)
31                 {
32                     _SpiralMatrix[start,i] = begin;
33                     begin++;
34                 }
35                 for (int j = start + 1; j < num; j++)
36                 {
37                     _SpiralMatrix[j, num - 1= begin;
38                     begin++;
39                 }
40                 for (int k = num - 2; k >= start; k--)
41                 {
42                     _SpiralMatrix[num-1, k] = begin;
43                     begin++;
44                 }
45                 for (int l = num - 2; l >= start+1; l--)
46                 {
47                     _SpiralMatrix[l, start] = begin;
48                     begin++;
49                 }
50                 Computer(start + 1, num - 1, begin);
51             }
52         }
53 
54         /// <summary>
55         /// 字符串化,方便对象输出
56         /// </summary>
57         /// <returns>字符串后的矩阵</returns>
58         public string ToString()
59         {
60             string temp="";
61             for(int i=0;i<_N;i++)
62             {
63                 for(int j=0;j<_N;j++)
64                 {
65                     temp+=_SpiralMatrix[i,j]+" ";
66                 }
67                 temp+="\r\n";
68             }
69             return temp;
70         }
71     }

 

posted @ 2010-06-22 21:56  程序员阿呆  阅读(1146)  评论(0)    收藏  举报