`
福将1032
  • 浏览: 44797 次
文章分类
社区版块
存档分类
最新评论

打印蛇形排列的数(这算法挺牛的)

 
阅读更多
  1. class  snakePrint {  
  2.     static   int  length =  7 ;  
  3.     static   int  value =  1 ;  
  4.     static   int [][] snake =  new   int [length][length];  
  5.     static  Direction lastDirection = Direction.Right;  
  6.   
  7.     static   enum  Direction {  
  8.         Right, Down, Left, Up;  
  9.     }  
  10.   
  11.     public   static   void  initialArray() {  
  12.         int  row =  0 , line =  0 ;  
  13.         for  ( int  c =  0 ; c < length * length; c++) {  
  14.             snake[row][line] = value;  
  15.             lastDirection = findDirection(row, line);  
  16.             switch  (lastDirection) {  
  17.                 case  Right:  
  18.                     line++;  
  19.                     break ;  
  20.                 case  Down:  
  21.                     row++;  
  22.                     break ;  
  23.                 case  Left:  
  24.                     line--;  
  25.                     break ;  
  26.                 case  Up:  
  27.                     row--;  
  28.                     break ;  
  29.                 default :  
  30.                     System.out.println("error" );  
  31.             }  
  32.             value++;  
  33.         }  
  34.     }  
  35.   
  36.     static  Direction findDirection( int  row,  int  line) {  
  37.         Direction direction = lastDirection;  
  38.         switch  (direction) {  
  39.             case  Right: {  
  40.                 if  ((line == length -  1 ) || (snake[row][line +  1 ] !=  0 ))  
  41.                     direction = direction.Down;  
  42.                 break ;  
  43.             }  
  44.             case  Down: {  
  45.                 if  ((row == length -  1 ) || (snake[row +  1 ][line] !=  0 ))  
  46.                     direction = direction.Left;  
  47.                 break ;  
  48.             }  
  49.             case  Left: {  
  50.                 if  ((line ==  0 ) || (snake[row][line -  1 ] !=  0 ))  
  51.                     direction = direction.Up;  
  52.                 break ;  
  53.             }  
  54.             case  Up: {  
  55.                 if  (snake[row -  1 ][line] !=  0 )  
  56.                     direction = direction.Right;  
  57.                 break ;  
  58.             }  
  59.         }  
  60.         return  direction;  
  61.     }  
  62.   
  63.     public   static   void  main(String[] args) {  
  64.         initialArray();  
  65.   
  66.         // display.....   
  67.         for  ( int  i =  0 ; i < length; i++) {  
  68.             for  ( int  j =  0 ; j < length; j++) {  
  69.                 System.out.print(snake[i][j] + "  " );  
  70.             }  
  71.             System.out.println();  
  72.         }  
  73.     }  

分享到:
评论

相关推荐

    变态的蛇形排序算法。

    蛇形排序(Snake Order)是一种特殊的排序方式,它在矩阵中按照蛇形路径填充数字,类似于棋盘上蛇的移动。这种排序方法在处理二维数组时特别有用,尤其是在需要交错填充数据的情况下。在C#中实现蛇形排序,我们可以...

    ACM算法-蛇行矩阵等

    蛇形矩阵,又称Z字形矩阵,是一种特殊的二维数组排列方式。它的基本思想是从左上角开始,按照“左-下-右-上”的顺序填充元素,形状如同蛇的蜿蜒移动。这种矩阵在处理二维数据时有着广泛的应用,例如在矩阵的打印、...

    算法分析中级训练

    数字排列算法 **题目描述**:将1、2、…、20这20个数排成一排,使得相邻的两个数之和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。 **解题思路**:这是一个典型的排列问题,可以通过回溯...

    c语言经典算法(来自bccn)

    这是一种经典的组合数表示形式,每行代表了组合数的一系列值,算法设计上可能涉及到递推或迭代的方法。 #### 2.12 字母矩形 可能涉及到字符的循环输出,用于绘制由字母组成的矩形图案,需要掌握字符编码和输出控制...

    PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析

    在本文中,我们将深入探讨如何使用PHP编程语言实现三种特殊的矩阵类型:蛇形矩阵、回环矩阵...无论是蛇形矩阵、回环矩阵还是数字螺旋矩阵,都可以通过适当的算法设计和逻辑控制实现,并可根据实际需求进行调整和优化。

    Turbo C程序设计例题解析

    2.4 蛇阵:可能与蛇形填充矩阵或蛇形打印有关。 2.5 对角矩阵:可能需要处理非标准的矩阵打印方式。 2.6 魔方阵:涉及到特定规则的矩阵生成,如幻方。 这些例题在UCDOS3.0和Turbo C 2.0环境下经过了严格的测试和...

    c语言经典例子 编程入门

    这个问题可以通过回溯算法或动态规划来解决。你需要创建一个二维数组,然后尝试填充数字,同时检查每行和每列的唯一性。一旦找到一个有效的解,就记录下来,并继续寻找下一个解。 5. **十进制转N进制**: 这个问题...

    c++课程设计

    通过不断取模和除以10的操作,可以分离出每个数字位,然后使用冒泡排序算法对这些数字进行降序排列。排序后的数字再次组合成一个新的五位数并输出。 此外,还提供了一个构建蛇形矩阵的例子。与螺旋矩阵不同,蛇形...

    C入门76题

    题目给出了三种矩阵填数的方式:倒填、蛇形填数、回转填数,并要求编程实现。 **解题思路:** 1. **倒填:** 从最后一个元素开始,按照顺序填充矩阵。 2. **蛇形填数:** 逐行填充,偶数行从右向左填充。 3. **...

    C++经典编程题目 经典考试题目

    这类问题涉及到排列组合,以及回溯法或递归算法的实现,是检验编程者对算法深度理解的好题目。 **数制转换**是一个与数学密切相关的编程题目。它要求将十进制数转换为N进制数,这不仅需要理解不同进制之间的转换...

    C++经典编程题、、、、

    1. **方向控制:**对于蛇形填数和回转填数,需要控制填数的方向。 2. **边界判断:**在填数过程中要注意边界条件,避免越界。 3. **输出格式:**根据题目要求输出矩阵,注意行列之间的分隔符。 #### 题目7:文本...

    Java编程实现打印螺旋矩阵实例代码

    生成螺旋矩阵需要使用复杂的算法和数据结构,这个代码提供了一个简单的解决方案。 这个代码还可以应用于其他领域,例如数据压缩、图像处理、游戏开发等。开发者可以根据自己的需求修改和扩展这个代码,以满足不同的...

    Python设计足球联赛赛程表程序的思路与简单实现示例

    为了将这一算法在Python中实现,我们可以使用`collections.deque`数据结构,它提供了高效的两端操作能力,非常适合于模拟蛇形排列的移动过程。在这个过程中,我们首先将所有队伍分为两列,一列是主队,另一列是客队...

Global site tag (gtag.js) - Google Analytics