主页 > 游戏开发  > 

cs106x-lecture12(Autumn2017)-SPL实现

cs106x-lecture12(Autumn2017)-SPL实现

打卡cs106x(Autumn 2017)-lecture12

(以下皆使用SPL实现,非STL库,后续课程结束会使用STL实现)

travel

Write a recursive function named travel that accepts integers x and y as parameters and uses recursive backtracking to print all solutions for traveling in the 2-D plane from (0, 0) to (x, y) by repeatedly using one of three moves:

East (E): move right 1 (increase x)North (N): move up 1 (increase y)Northeast (NE): move up 1 and right 1 (increase both x and y)

The following diagram shows one such path to the point (5, 3).

You may assume that the x/y values passed are non-negative. If x and y are both 0, print a blank line.

The table below shows several calls to your function and the lines of output. Your lines can appear in any order; our output shown tries the possibilities in the order listed above: East, then North, then Northeast.

CallOutputCallOutput

travel(1, 2); E N N N E N N N E N NE NE N

travel(2, 2); E E N N E N E N E N N E E N NE E NE N N E E N N E N E N E NE N N E E N NE E NE E N NE N E NE NE

travel(2, 1); E E N E N E E NE N E E NE E

travel(1, 1); E N N E NE

Constraints: Your solution must be recursive. Do not use any loops in solving this problem.

解答:

#include <iostream> #include <string> #include "console.h" #include "vector.h" using namespace std; void travelHelper(int x, int y, int sx, int sy, string& s) { if (sx == x && sy == y) { cout << s << endl; } else { if (sx <= x && sy <= y) { s += "E "; travelHelper(x, y, sx + 1, sy, s); s.erase(s.size() - 2, 2); s += "N "; travelHelper(x, y, sx, sy + 1, s); s.erase(s.size() - 2, 2); s += "NE "; travelHelper(x, y, sx + 1, sy + 1, s); s.erase(s.size() - 3, 3); } } } void travel(int x, int y) { string s = ""; int sx = 0; int sy = 0; travelHelper(x, y, sx, sy, s); } int main() { travel(1, 2); return 0; }

 

标签:

cs106x-lecture12(Autumn2017)-SPL实现由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“cs106x-lecture12(Autumn2017)-SPL实现