include "stdafx.h"

  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. #include<iomanip>
  5. using namespace std;
  6. class Visit {
  7. public:
  8. int countPath(vector<vector<int> > map, int n, int m) {
  9. int count=0;
  10. int compX, compY, sellerX,sellerY;
  11. for (int i = 0;i < map.size();i++)
  12. {
  13. for (int j = 0;j < map[0].size();j++)
  14. {
  15. if (map[i][j] == 1)
  16. {
  17. compX = i; compY = j;
  18. // cout << "i:" << i << endl;
  19. // cout << "j:" << j << endl;
  20. }
  21. if (map[i][j] == 2)
  22. {
  23. sellerX = i, sellerY = j;
  24. // cout << "i:" << i << endl;
  25. // cout << "j:" << j << endl;
  26. }
  27. }
  28. }
  29. int minX = min(sellerX,compX);
  30. int maxX = max(sellerX, compX);
  31. int minY = min(sellerY, compY);
  32. int maxY = max(sellerY, compY);
  33. vector<vector<int> > mapp;
  34. for (int i = minX;i <= maxX;i++)
  35. {
  36. vector<int> vec;
  37. for (int j = minY;j <= maxY;j++)
  38. {
  39. vec.push_back(map[i][j]);
  40. }
  41. mapp.push_back(vec);
  42. }
  43. if (mapp[0][0] == 1)
  44. {
  45. return getPathLR(mapp);
  46. }else if(mapp[mapp.size()-1][0] == 1)
  47. {
  48. return getPathHR(mapp);
  49. }
  50. else if (mapp[0][mapp[0].size()-1] == 1)
  51. {
  52. return getPathLL(mapp);
  53. }
  54. else
  55. {
  56. return getPathHL(mapp);
  57. }
  58. }
  59. int getPathLR(vector<vector<int> > map) {
  60. // if (map[0][0] != 1) return 0;
  61. if (map.size() == 1)
  62. {
  63. int num = 0;
  64. for (int i = 0;i < map[0].size();i++)
  65. {
  66. if (map[0][i] == -1)
  67. {
  68. num = 0;
  69. break;
  70. }
  71. if (map[0][i] == 2)
  72. {
  73. num = 1;
  74. break;
  75. }
  76. }
  77. return num;
  78. }
  79. if (map[0].size() == 1)
  80. {
  81. int num = 0;
  82. for (int i = 0;i < map.size();i++)
  83. {
  84. if (map[i][0] == -1)
  85. {
  86. num = 0;
  87. break;
  88. }
  89. if (map[i][0] == 2)
  90. {
  91. num = 1;
  92. break;
  93. }
  94. }
  95. return num;
  96. }
  97. return getPathLR(deleteRowLR( map) )+ getPathLR(deleteColLR(map));
  98. }
  99. vector<vector<int> > deleteRowLR(vector<vector<int> > map)
  100. {
  101. map.erase(map.begin());
  102. return map;
  103. }
  104. vector<vector<int> > deleteColLR(vector<vector<int> > map)
  105. {
  106. for (int i = 0;i < map.size();i++)
  107. {
  108. map[i].erase(map[i].begin());
  109. }
  110. return map;
  111. }
  112. int getPathHR(vector<vector<int> > map) {
  113. // if (map[map.size()-1][0] != 1) return 0;
  114. if (map.size() == 1)
  115. {
  116. int num = 0;
  117. for (int i = 0;i < map[0].size();i++)
  118. {
  119. if (map[0][i] == -1)
  120. {
  121. num = 0;
  122. break;
  123. }
  124. if (map[0][i] == 2)
  125. {
  126. num = 1;
  127. break;
  128. }
  129. }
  130. return num;
  131. }
  132. if (map[0].size() == 1)
  133. {
  134. int num = 0;
  135. for (int i = map.size()-1;i >=0;i--)
  136. {
  137. if (map[i][0] == -1)
  138. {
  139. num = 0;
  140. break;
  141. }
  142. if (map[i][0] == 2)
  143. {
  144. num = 1;
  145. break;
  146. }
  147. }
  148. return num;
  149. }
  150. return getPathHR(deleteRowHR(map)) + getPathHR(deleteColHR(map));
  151. }
  152. vector<vector<int> > deleteRowHR(vector<vector<int> > map)
  153. {
  154. map.erase(map.end()-1);
  155. return map;
  156. }
  157. vector<vector<int> > deleteColHR(vector<vector<int> > map)
  158. {
  159. for (int i = 0;i < map.size();i++)
  160. {
  161. map[i].erase(map[i].begin());
  162. }
  163. return map;
  164. }
  165. int getPathLL(vector<vector<int> > map) {
  166. // if (map[0][map[0].size() - 1] != 1) return 0;
  167. int count = 0;
  168. if (map.size() == 1)
  169. {
  170. int num = 0;
  171. for (int i = map[0].size()-1;i >=0;i--)
  172. {
  173. if (map[0][i] == -1)
  174. {
  175. num = 0;
  176. break;
  177. }
  178. if (map[0][i] == 2)
  179. {
  180. num = 1;
  181. break;
  182. }
  183. }
  184. return num;
  185. }
  186. if (map[0].size() == 1)
  187. {
  188. int num = 0;
  189. for (int i = 0;i < map.size();i++)
  190. {
  191. if (map[i][0] == -1)
  192. {
  193. num = 0;
  194. break;
  195. }
  196. if (map[i][0] == 2)
  197. {
  198. num = 1;
  199. break;
  200. }
  201. }
  202. return num;
  203. }
  204. return getPathLL(deleteRowLL(map)) + getPathLL(deleteColLL(map));
  205. }
  206. vector<vector<int> > deleteRowLL(vector<vector<int> > map)
  207. {
  208. map.erase(map.begin());
  209. return map;
  210. }
  211. vector<vector<int> > deleteColLL(vector<vector<int> > map)
  212. {
  213. for (int i = 0;i < map.size();i++)
  214. {
  215. map[i].erase((map[i].end()-1));
  216. }
  217. return map;
  218. }
  219. int getPathHL(vector<vector<int> > map) {
  220. // if (map[map.size()-1][map[0].size() - 1] != 1) return 0;
  221. if (map.size() == 1)
  222. {
  223. int num = 0;
  224. for (int i = map[0].size()-1;i >=0;i--)
  225. {
  226. if (map[0][i] == -1)
  227. {
  228. num = 0;
  229. break;
  230. }
  231. if (map[0][i] == 2)
  232. {
  233. num = 1;
  234. break;
  235. }
  236. }
  237. return num;
  238. }
  239. if (map[0].size() == 1)
  240. {
  241. int num = 0;
  242. for (int i = map.size()-1;i >=0;i--)
  243. {
  244. if (map[i][0] == -1)
  245. {
  246. num = 0;
  247. break;
  248. }
  249. if (map[i][0] == 2)
  250. {
  251. cout << "执行了" << endl;
  252. num = 1;
  253. break;
  254. }
  255. }
  256. return num;
  257. }
  258. return getPathHL(deleteRowHL(map)) + getPathHL(deleteColHL(map));
  259. }
  260. vector<vector<int> > deleteRowHL(vector<vector<int> > map)
  261. {
  262. map.erase(map.end()-1);
  263. return map;
  264. }
  265. vector<vector<int> > deleteColHL(vector<vector<int> > map)
  266. {
  267. for (int i = 0;i < map.size();i++)
  268. {
  269. map[i].erase((map[i].end() - 1));
  270. }
  271. return map;
  272. }
  273. };
  274. int main()
  275. {
  276. vector<vector<int> > map;
  277. vector<int> vec1 = { 0,1,0 };
  278. vector<int> vec2 = { 2,0,0 };
  279. map.push_back(vec1);
  280. map.push_back(vec2);
  281. Visit v;
  282. cout << v.countPath(map, 2, 3) << endl;;
  283. return 0;
  284. }

现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。的更多相关文章

  1. 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。

    // 第一种方法 // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...

  2. 转:已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。

    答案: int max(int a,int b){return (a+b+abs(a-b))/2;} 类似的 请定义一个宏,比较两个数a.b的大小,不能使用大于.小于.if语句 答案: #define ...

  3. Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。

    倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offse ...

  4. WCF技术剖析之十三:序列化过程中的已知类型(Known Type)

    原文:WCF技术剖析之十三:序列化过程中的已知类型(Known Type) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话) ...

  5. 【杨氏矩阵+勾长公式】POJ 2279 Mr. Young's Picture Permutations

    Description Mr. Young wishes to take a picture of his class. The students will stand in rows with ea ...

  6. C# 序列化过程中的已知类型(Known Type)

    WCF下的序列化与反序列化解决的是数据在两种状态之间的相互转化:托管类型对象和XML.由于类型定义了对象的数据结构,所以无论对于序列化还是反序列化,都必须事先确定对象的类型.如果被序列化对象或者被反序 ...

  7. 【React】开发一个城市选择控件

    想到做这个,是因为无意中在github上看到了这一个仓库https://github.com/lunlunshiwo/ChooseCity,做的就是一个城市选择控件,是用vue写的,说的是阿里的一道题 ...

  8. Shell 从日志文件中选择时间段内的日志输出到另一个文件

    Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...

  9. 算法战斗:给定一个号码与通配符问号W,问号代表一个随机数字。 给定的整数,得到X,和W它具有相同的长度。 问:多少整数协议W的形式和的比率X大?

    如果说: 给定一个号码与通配符问号W,问号代表一个随机数字. 给定的整数,得到X,和W它具有相同的长度. 问:多少整数协议W的形式和的比率X大? 进格公式 数据的多组,两排各数据的,W,第二行是X.它 ...

随机推荐

  1. 51Nod 1028 大数乘法 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 分析: FFT/NTT板子题... 代码: NTT板子: #inc ...

  2. 自定义JS类,并扩展其方法和属性

    function CT() { } CT.prototype.P = "TTT"; CT.Test = function () { alert(arguments[0]); }; ...

  3. ckeditor编辑的使用方法

    一.下载安装Ckeditor,并将其整合到项目中 1.什么是CKeditor?为什么要使用它? 我们在做门户网站或者公文系统时,客户经常要求在录入时能够更改字体样式.大小.颜色并具备插入图片的功能.而 ...

  4. [LeetCode] Merge Intervals 排序sort

    Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...

  5. PE笔记之NT头PE扩展头

    typedef struct _IMAGE_OPTIONAL_HEADER {       //       // Standard fields.       //       WORD    Ma ...

  6. reportlab包使用指南

    reportlab.canvas有这六个主要参数 1.pagesize:设置纸张大小    #from reportlab.lib.pagesizes import letter, A4  导入常见的 ...

  7. 移动GIS技术在城市信息采集中的应用

    1 引言 随着移动平板电脑和手机(以下简称移动终端)在软硬件上的更新换代,和3G.4G通讯网络的升级,传统测绘和和数据服务方式正在发生巨大变化.以城市中的外业踏勘和信息采集为例,移动终端正成为主要的外 ...

  8. LeetCode OJ-- Jump Game II **

    https://oj.leetcode.com/problems/jump-game-ii/ 给一个数列,每次可以跳相应位置上的步数,问跳到最后位置至少用几步. 动态规划: j[pos]表示从0到po ...

  9. 【转载】Outlook2010 移动数据文件到其它地方

            您可以将数据文件移到计算机的其他文件夹中.移动文件的一个原因在于可使备份更容易并且可以让默认的outlook邮件文件不在存在C盘,导致装系统不见或者文件过大而撑死了C盘.例如,如果数据 ...

  10. foreach_break 面试记录

    版权所有@foreach_break] [博客地址 http://www.cnblogs.com/foreach-break] 可以转载,但必须注明出处并保持博客超链接 背景 自从2013年离开北京后 ...