注:原博客账号密码丢失,故将本科期间的笔记搬运至此
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
版权声明:本文为博主原创文章,转载请附上博文链接!