-->
当前位置:首页 > 题库 > 正文内容

编程题:DFS

Luz3年前 (2022-09-06)题库346
米尔科在祖父的阁楼上发现了一批可追溯到第二次世界大战的玩具坦克。他立刻打电话给他的朋友斯拉夫科和他一起玩。他们建造了一个战场——一个由N排和N列正方形组成的木板。

每个坦克可以在一次移动中移动到四个相邻的方格中的一个。坦克可以射击同一排和同一列的任何正方形。据说这辆坦克是在保护它所在的行列。此外,任何时候都不能有两个坦克在同一个格子上。经过几个小时的游戏和之前的两次尝试,米尔科的妈妈大声叫他们再次下来吃午饭,他们决定重新安排坦克,让每个坦克守卫不同的行列(也就是说,每一行和每一列只包含一个坦克)。

然而,他们希望使用最少的移动次数来实现这一点。

编写一个程序,找出重新排列坦克所需的最小移动次数,以便每行和每列包含一个坦克,以及这样一个最短的移动序列。

### 输入格式:
输入的第一行包含整数$$N(5≤ N≤ 500).$$

以下$$N$$行中的每一行都包含两个整数$$R$$和$$C(1≤ R、 S≤ N)$$ ,代表在妈妈呼唤的那一刻,一辆坦克所在的行和列。没有两个坦克在同一个格子上。

行和列标记为1到$$N$$,从上到下,从左到右。
### 输出格式:
在第一行输出最小移动次数(称为$$K$$)。

接下来的每一条$$K$$线都应包含移动的储罐及其移动方向,并用一个单独的空间隔开。
按照输入中给出的顺序,油箱编号为1到$$N$$。

方向可以是四个大写字母中的一个:$$“L”$$表示左侧,$$“R”$$表示右侧,$$“U”$$表示向上,$$“D”$$表示向下。

注意:顺序不必是唯一的。

### 输入样例1:
in
5
1 1
1 2
1 3
1 4
1 5

### 输出样例1:
out
10
1 D
2 D
3 D
4 D
1 D
2 D
3 D
1 D
2 D
1 D


### 输入样例2:
in
5
2 3
3 2
3 3
3 4
4 3

### 输出样例2:
out
8
1 R
1 R
2 U
2 U
4 D
4 D
5 L
5 L


### 输入样例2:
in
6
1 1
1 2
2 1
5 6
6 5
6 6

### 输出样例2:
out
8
2 R
2 D
3 D
3 R
4 U
4 L
5 L
5 U








答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。