首页 > ACM题库 > HDU-杭电 > Hdu 1357 Cave Exploration 待解决 [解题报告] C++
2013
12-09

Hdu 1357 Cave Exploration 待解决 [解题报告] C++

Cave Exploration

问题描述 :

Long time ago one man said, that he had explored the corridors of one cave. It means, that he was in all corridors of the cave.Corridors are really horizontal or vertical segments. Corridor counted visited if he was in at least one point of corridor.

Now you want to know, is it true. You have a map of the cave, and you know that explorer used the following algorithm: he turns left if he can, if he can’t he goes straight, if he can’t he turns right, if he can’t he turns back.Exploration ends when the man reaches entry point second time. You task to count how many corridors wasn’t visited by explorer.

输入:

In the first line there is an integer T (T<=20) � the number of different maps. For each map in first line there is an integer N (N<=1000) � the number of corridors. It is known that no two vertical corridors have common point and no two horizontal corridors have common point.So the next N lines contain such information: the line starts with one of the characters V or H �vertical or horizontal corridor. Then one Y-coordinate and two X-coordinates are given for a horizontal corridor or one X-coordinate and two Y-coordinates for a vertical corridor. The last line for each map contains X and Y coordinates of the entry point (start and end point of travel) and the direction (W � left, E � right, N � up and S � down). You may assume that: entry point is not located in the cross-point of two corridors, and explorer can always moves forward by the direction given in the input. All coordinates are integers and do not exceed 32767 by absolute value and there is no more than 500 vertical corridors and no more than 500 horizontal corridors.

输出:

For each map the program has to print the number of unvisited corridors in separate line.

样例输入:

2
6
H 0 6 0
H 2 1 6
V 1 0 4
V 5 3 0
V 3 0 2
H 1 2 4
6 0 W
1
V 0 -5 5
0 0 S

样例输出:

1
0


  1. 我没看懂题目
    2
    5 6 -1 5 4 -7
    7 0 6 -1 1 -6 7 -5
    我觉得第一个应该是5 6 -1 5 4 输出是19 5 4
    第二个是7 0 6 -1 1 -6 7输出是14 7 7
    不知道题目例子是怎么得出来的

  2. 约瑟夫也用说这么长……很成熟的一个问题了,分治的方法解起来o(n)就可以了,有兴趣可以看看具体数学的第一章,关于约瑟夫问题推导出了一系列的结论,很漂亮

  3. 第二个方法挺不错。NewHead代表新的头节点,通过递归找到最后一个节点之后,就把这个节点赋给NewHead,然后一直返回返回,中途这个值是没有变化的,一边返回一边把相应的指针方向颠倒,最后结束时返回新的头节点到主函数。