算法十三
来源:互联网 发布:北京金税三期软件下载 编辑:程序博客网 时间:2024/04/29 17:38
小明的游戏
算法描述
- 小明喜欢玩游戏,这个算法是关于游戏的。
- 游戏中有n个地点,标记为0到n-1
- 每个地点有一个入口和一个出口
- 输入为一个列表
nextLevel
,拥有n个元素 - i代表i结点的入口,nextLevel[i]代表这i结点的出口
- nextLevel[i]的值为-1时代表着小明赢的了该游戏
- 小明从0结点开始玩游戏,一直走下去,若是最后走到-1,就赢了(输出“Win”),否则就是输了(输出“Lose”)
参数定义
- 类名
DevuAndGame
- 方法
canWin
- 输入参数
vector <int>
- 输出
string
- 方法声明
string canWin(vector <int> nextLevel)
限制条件
nextLevel
包含[1, 50]个元素nextLevel[i]
的值为-1或者[0, n-1]中的某个值
例子
- 输入
- nextLevel: {1, -1}
- 输出
- ”Win”
小明从0结点开始. 出去后会到结点1,从结点1出来后会赢的游戏.
测试实例
- 实例一
- 输入
- {1, 0, -1}
- 输出
- ”Lose”
- 输入
小明会在0,1之间来回走,他无法走到结点2的出口.
实例二
- 输入
- {0, 1, 2}
- 输出
- ”Lose”
- 输入
实例三
- 输入
- {29,33,28,16,-1,11,10,14,6,31,7,35,34,8,15,17,26,12,13,22,1,20,2,21,-1,5,19,9,18,4,25,32,3,30,23,10,27}
- 输出
- ”Win”
- 输入
实例四
- 输入
- {17,43,20,41,42,15,18,35,-1,31,7,33,23,33,-1,-1,0,33,19,12,42,-1,-1,9,9,-1,39,-1,31,46,-1,20,44,41,-1,-1,12,-1,36,-1,-1,6,47,10,2,4,1,29}
- 输出
- ”Win”
- 输入
实例五
- 输入
- {3, 1, 1, 2, -1, 4}
- 输出
- ”Lose”
- 输入
代码
#include <iostream>#include <vector>using namespace std;class DevuAndGame {public: string canWin(vector<int> nextLevel) { /* if there's no '-1' in nextLevel, the game result must be lose */ bool exitEnd = false; for(vector<int>::const_iterator iter = nextLevel.cbegin(); iter < nextLevel.cend(); iter++) { if(-1 == *iter) { exitEnd = true; break; } } if(!exitEnd) return "Lose"; /* if the route comes back, the game will lose, otherwise, will it must reach '-1' finally */ vector<int> visitedNode; bool comeBackFlag = false, reachEndFlag = false; int i = 0; // either of the flag is true , the game's result is judged while(!comeBackFlag && !reachEndFlag) { visitedNode.push_back(i); for(vector<int>::const_iterator iter = visitedNode.cbegin(); iter < visitedNode.cend(); iter++) { if(nextLevel[i] == *iter) { // the route truely come back, the game will lose comeBackFlag = true; break; } } i = nextLevel[i]; if(-1 == i) // reach the end, game will win reachEndFlag = true; } if(comeBackFlag) return "Lose"; else return "Win"; }};int main() { vector<int> nextLevel {29,33,28,16,-1,11,10,14,6,31,7,35,34,8,15,17,26,12,13,22,1,20,2,21,-1,5,19,9,18,4,25,32,3,30,23,10,27}; DevuAndGame dag; string ret = dag.canWin(nextLevel); cout << ret << endl; cout.flush();}
阅读全文
0 0
- 算法十三
- 算法二十三
- 算法提高 金陵十三钗
- 算法(十三)树状数组
- USACO算法系列十三——butter
- USACO算法系列十三(续)
- 归并排序(Merging Sort)----(排序算法十三)
- 白话机器学习算法(十三)LVQ
- 每日算法之十三:Longest Common Prefix
- 算法导论第13(十三)章红黑树
- 白话机器学习算法(十三)LVQ
- 算法精解十三(C语言版)
- 算法精解二十三(C语言版)
- 算法导论 第三十三章:字符串匹配
- 十三周 项目4-Floyd算法验证
- 蓝桥杯算法提高 -- 金陵十三钗
- 【数据结构与算法】十三 twoSum hash
- Zookeeper学习(十三):Zookeeper的选举算法
- 更改项目图标
- Hdu6092 Rikka with Subset(2017多校第5场)
- 面试题:找出公司员工最喜欢的k种水果
- 记录一,技术&现在的想法
- requests学习
- 算法十三
- 《机器学习》读书笔记 4 第2章 模型评估与选择 二
- tomcat7最大并发数,等待连接数,最大连接数配置
- centos6.5 安装Git 及其使用
- 开始写博客
- perl基本知识点整理
- 算法系列——Simplify Path
- Unity+Behavior Tree行为树 Behavior Designer 行为树概述(一)
- Bootstrap的栅格化系统