搬桌子问题

注:原博客账号密码丢失,故将本科期间的笔记搬运至此

package Test0307;
//教室
public class Room {

    //教室是否需要搬出椅子
    public boolean start;

    //目的教室
    public int end;

    //构造方法
    Room(boolean start, int end) {
        this.start = start;
        this.end = end;
    }

    //算法
    public static int move(Room[] room) {

        //计数器
        int count = 0;
        while(true) {
            //设置标志,是否还有桌子移动
            boolean flag = false;
            int i = 1;
            while(i < room.length) {
                if(room[i].start == true) {
                    room[i].start = false;
                    flag = true;
                    System.out.println("从 " + i + " 搬到" + room[i].end);
                    i = room[i].end;

                } else {
                    i++;
                }
            }
            if(flag == false) return count;
            count ++ ;
        }

    }
}
public static void main(String[] args) {
    /**
     * 搬桌子问题
     *  某教学大楼一层有n个教室,从左到右依次编号为1、2、…、n。现在要把一些课桌从某些教室搬到
     *  另外一些教室,每张桌子都是从编号较小的教室搬到编号较大的教室,每一趟,都是从左到右走,
     *  搬完一张课桌后,可以继续从当前位置或往右走搬另一张桌子。输入数据:先输入n、m,然后紧接
     *  着m行输入这m张要搬课桌的起始教室和目标教室。输出数据:最少需要跑几趟。
     */

    Scanner in = new Scanner(System.in);

    // 先读入 n,m
    int n = in.nextInt();
    int m = in.nextInt();
    // 初始化room 数组
    // System.out.println(n);
    Room[] room = new Room[n + 2];
    for (int i = 1; i < room.length; i++) {
        room[i] = new Room(false, -1);
    }
    // 读入数据
    while (m-- != 0) {
        int start = in.nextInt();
        int end = in.nextInt();
        room[start].start = true;
        room[start].end = end;
    }
    for (int i = 1; i < room.length; i++) {
        System.out.print(room[i].start);
        System.out.println(room[i].end);
    }
    // 执行算法
    System.out.println(Room.move(room));
}
--------------------- 
作者:D??? 
来源:CSDN 
原文:https://blog.csdn.net/qq_31424383/article/details/79476004 
版权声明:本文为博主原创文章,转载请附上博文链接!
发布了32 篇原创文章 · 获赞 7 · 访问量 7592

猜你喜欢

转载自blog.csdn.net/Isaacddx/article/details/85057191
今日推荐