当前位置: 首页 > news >正文

cs106x-lecture12(Autumn 2017)-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).

travel

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;
}

 

相关文章:

  • Android14(13)添加墨水屏手写API
  • 一款开源可独立部署的知识管理工具!!
  • LeetCode 热题 100_搜索插入位置(63_35_简单_C++)(二分查找)(”>>“ 与 “/”)
  • 离线部署大模型:ollama+deepseek+open-webui
  • Node.js高频面试题精选及参考答案
  • 深入了解 Pinia:Vue 的下一代状态管理工具 (上篇)
  • Android 进程间通信中 Messager 的简单使用
  • 大模型领域常见的专业术语和关键词及简要解释
  • 量子算法导论
  • 【python】网页批量转PDF
  • 【Python爬虫(30)】构建高效爬虫数据管理体系:从抓取到协作
  • 【Linux】序列化、守护进程、应用层协议HTTP、Cookie和Session
  • 头条搜索下拉词和抖音搜索提示词删除的方法
  • 通过 WSL 2(Windows Subsystem for Linux 2)运行基于 Linux 的容器,怎么在浏览器中打开镜像默认页
  • 如何调用 DeepSeek API:详细教程与示例
  • 环境变量3
  • Android开发-深入解析Android中的AIDL及其应用场景
  • 【深度学习】Unet的基础介绍
  • 【Redis】在Java中以及Spring环境下操作Redis
  • 超高清大图渲染性能优化实战:从页面卡死到流畅加载
  • 段友做的看电影网站/关键词查网址
  • 广州做餐饮的招聘网站/seo自学
  • 阿里云服务器可以做网站/seo引擎优化
  • 网站建设注意细节问题/百度收录查询api
  • 外贸需要网站做生产车间展示/百度一下首页百度一下知道
  • 沈阳发布紧急通知/google搜索优化