Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 728|回复: 0

写螺旋矩阵

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-9-13 20:05:52 | 显示全部楼层 |阅读模式
    输入一个矩阵的行列数量,生成一个螺旋矩阵,比如输入3,5,则打印:
    1    2   3  4  5
    12 13 14 15 6
    11 10   9  8 7
    网上的代码,蚂蚁爬矩阵,学习了。

    [pre]import java.util.*; public class AntGame {          public static void main(String[] args) {           int rowSize = 5;           int colSize = 3;           AntMap antMap = new AntMap(rowSize, colSize);           Ant ant = new Ant(antMap);           Position position = new Position(0,0);           int count = 1;           while (count <= colSize * rowSize) {               ant.crawl(position, count++);           }           antMap.print();       }   }      class AntMap {          int[][] matrix;       int rowSize;       int colSize;              AntMap(int rowSize, int colsize) {           this.rowSize = rowSize;           this.colSize = colsize;           matrix = new int[rowSize][colsize];       }          void print() {           for (int i = 0; i < rowSize; ++i) {               for (int j = 0; j < colSize; ++j)                    System.out.format("%3d", matrix[j]);               System.out.println();           }       }       public boolean isFilled(Position position) {           return matrix[position.row][position.col] != 0;       }   }      enum Action {  //精华在这里了。            FORWARD {           public void act(Position position) {               position.col++;           }              public boolean shouldTurn(Position position, AntMap antMap) {               return position.col == antMap.colSize-1                   || antMap.isFilled(position.nextCol());           }       },        DOWN {           public void act(Position position) {               position.row++;           }                      public boolean shouldTurn(Position position, AntMap antMap) {               return position.row == antMap.rowSize-1                   || antMap.isFilled(position.nextRow());           }       },       BACKWARD {           public void act(Position position) {               position.col--;           }              public boolean shouldTurn(Position position, AntMap antMap) {               return position.col == 0                    || antMap.isFilled(position.previousCol());           }       },        UP {           public void act(Position position) {               position.row--;           }              public boolean shouldTurn(Position position, AntMap antMap) {               return position.row == 0                    || antMap.isFilled(position.previousRow());           }       };       public abstract void act(Position position);       public abstract boolean shouldTurn(Position position, AntMap antMap);              private static List< Action> list = new ArrayList< Action>();              public static List< Action> actions() {           if (!list.isEmpty()) return list;           list.add(FORWARD);           list.add(DOWN);           list.add(BACKWARD);           list.add(UP);           return list;       }   }      class Position {              int row;        int col;               public Position(int row, int col) {           this.row = row;           this.col = col;       }              public Position previousCol() {           return new Position(row, col-1);       }       public Position nextCol() {           return new Position(row, col+1);       }       public Position previousRow() {           return new Position(row-1, col);       }       public Position nextRow() {           return new Position(row+1, col);       }   }      class Ant {              AntMap antMap = null;       Action curentAction = Action.FORWARD;              Ant(AntMap antMap) {           this.antMap = antMap;       }       void crawl(Position position, int count) {           antMap.matrix[position.row][position.col] = count;           if (curentAction.shouldTurn(position, antMap))               turn();           curentAction.act(position);       }          private void turn() {           List< Action> actions = Action.actions();           curentAction = actions.get((actions.indexOf(curentAction)+1)%4);       }    }     [/pre]运行结果:


    C:\java>java AntGame
    1   2   3
    12 13  4
    11 14  5
    10 15  6
    9   8   7
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-4 22:36 , Processed in 0.503213 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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