现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。
include "stdafx.h"
#include<iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
using namespace std;
class Visit {
public:
int countPath(vector<vector<int> > map, int n, int m) {
int count=0;
int compX, compY, sellerX,sellerY;
for (int i = 0;i < map.size();i++)
{
for (int j = 0;j < map[0].size();j++)
{
if (map[i][j] == 1)
{
compX = i; compY = j;
// cout << "i:" << i << endl;
// cout << "j:" << j << endl;
}
if (map[i][j] == 2)
{
sellerX = i, sellerY = j;
// cout << "i:" << i << endl;
// cout << "j:" << j << endl;
}
}
}
int minX = min(sellerX,compX);
int maxX = max(sellerX, compX);
int minY = min(sellerY, compY);
int maxY = max(sellerY, compY);
vector<vector<int> > mapp;
for (int i = minX;i <= maxX;i++)
{
vector<int> vec;
for (int j = minY;j <= maxY;j++)
{
vec.push_back(map[i][j]);
}
mapp.push_back(vec);
}
if (mapp[0][0] == 1)
{
return getPathLR(mapp);
}else if(mapp[mapp.size()-1][0] == 1)
{
return getPathHR(mapp);
}
else if (mapp[0][mapp[0].size()-1] == 1)
{
return getPathLL(mapp);
}
else
{
return getPathHL(mapp);
}
}
int getPathLR(vector<vector<int> > map) {
// if (map[0][0] != 1) return 0;
if (map.size() == 1)
{
int num = 0;
for (int i = 0;i < map[0].size();i++)
{
if (map[0][i] == -1)
{
num = 0;
break;
}
if (map[0][i] == 2)
{
num = 1;
break;
}
}
return num;
}
if (map[0].size() == 1)
{
int num = 0;
for (int i = 0;i < map.size();i++)
{
if (map[i][0] == -1)
{
num = 0;
break;
}
if (map[i][0] == 2)
{
num = 1;
break;
}
}
return num;
}
return getPathLR(deleteRowLR( map) )+ getPathLR(deleteColLR(map));
}
vector<vector<int> > deleteRowLR(vector<vector<int> > map)
{
map.erase(map.begin());
return map;
}
vector<vector<int> > deleteColLR(vector<vector<int> > map)
{
for (int i = 0;i < map.size();i++)
{
map[i].erase(map[i].begin());
}
return map;
}
int getPathHR(vector<vector<int> > map) {
// if (map[map.size()-1][0] != 1) return 0;
if (map.size() == 1)
{
int num = 0;
for (int i = 0;i < map[0].size();i++)
{
if (map[0][i] == -1)
{
num = 0;
break;
}
if (map[0][i] == 2)
{
num = 1;
break;
}
}
return num;
}
if (map[0].size() == 1)
{
int num = 0;
for (int i = map.size()-1;i >=0;i--)
{
if (map[i][0] == -1)
{
num = 0;
break;
}
if (map[i][0] == 2)
{
num = 1;
break;
}
}
return num;
}
return getPathHR(deleteRowHR(map)) + getPathHR(deleteColHR(map));
}
vector<vector<int> > deleteRowHR(vector<vector<int> > map)
{
map.erase(map.end()-1);
return map;
}
vector<vector<int> > deleteColHR(vector<vector<int> > map)
{
for (int i = 0;i < map.size();i++)
{
map[i].erase(map[i].begin());
}
return map;
}
int getPathLL(vector<vector<int> > map) {
// if (map[0][map[0].size() - 1] != 1) return 0;
int count = 0;
if (map.size() == 1)
{
int num = 0;
for (int i = map[0].size()-1;i >=0;i--)
{
if (map[0][i] == -1)
{
num = 0;
break;
}
if (map[0][i] == 2)
{
num = 1;
break;
}
}
return num;
}
if (map[0].size() == 1)
{
int num = 0;
for (int i = 0;i < map.size();i++)
{
if (map[i][0] == -1)
{
num = 0;
break;
}
if (map[i][0] == 2)
{
num = 1;
break;
}
}
return num;
}
return getPathLL(deleteRowLL(map)) + getPathLL(deleteColLL(map));
}
vector<vector<int> > deleteRowLL(vector<vector<int> > map)
{
map.erase(map.begin());
return map;
}
vector<vector<int> > deleteColLL(vector<vector<int> > map)
{
for (int i = 0;i < map.size();i++)
{
map[i].erase((map[i].end()-1));
}
return map;
}
int getPathHL(vector<vector<int> > map) {
// if (map[map.size()-1][map[0].size() - 1] != 1) return 0;
if (map.size() == 1)
{
int num = 0;
for (int i = map[0].size()-1;i >=0;i--)
{
if (map[0][i] == -1)
{
num = 0;
break;
}
if (map[0][i] == 2)
{
num = 1;
break;
}
}
return num;
}
if (map[0].size() == 1)
{
int num = 0;
for (int i = map.size()-1;i >=0;i--)
{
if (map[i][0] == -1)
{
num = 0;
break;
}
if (map[i][0] == 2)
{
cout << "执行了" << endl;
num = 1;
break;
}
}
return num;
}
return getPathHL(deleteRowHL(map)) + getPathHL(deleteColHL(map));
}
vector<vector<int> > deleteRowHL(vector<vector<int> > map)
{
map.erase(map.end()-1);
return map;
}
vector<vector<int> > deleteColHL(vector<vector<int> > map)
{
for (int i = 0;i < map.size();i++)
{
map[i].erase((map[i].end() - 1));
}
return map;
}
};
int main()
{
vector<vector<int> > map;
vector<int> vec1 = { 0,1,0 };
vector<int> vec2 = { 2,0,0 };
map.push_back(vec1);
map.push_back(vec2);
Visit v;
cout << v.countPath(map, 2, 3) << endl;;
return 0;
}
现在有一个城市销售经理,需要从公司出发,去拜访市内的商家,已知他的位置以及商家的位置,但是由于城市道路交通的原因,他只能在左右中选择一个方向,在上下中选择一个方向,现在问他有多少种方案到达商家地址。给定一个地图map及它的长宽n和m,其中1代表经理位置,2代表商家位置,-1代表不能经过的地区,0代表可以经过的地区,请返回方案数,保证一定存在合法路径。保证矩阵的长宽都小于等于10。的更多相关文章
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
// 第一种方法 // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...
- 转:已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。
答案: int max(int a,int b){return (a+b+abs(a-b))/2;} 类似的 请定义一个宏,比较两个数a.b的大小,不能使用大于.小于.if语句 答案: #define ...
- Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。
倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offse ...
- WCF技术剖析之十三:序列化过程中的已知类型(Known Type)
原文:WCF技术剖析之十三:序列化过程中的已知类型(Known Type) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话) ...
- 【杨氏矩阵+勾长公式】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 ...
- C# 序列化过程中的已知类型(Known Type)
WCF下的序列化与反序列化解决的是数据在两种状态之间的相互转化:托管类型对象和XML.由于类型定义了对象的数据结构,所以无论对于序列化还是反序列化,都必须事先确定对象的类型.如果被序列化对象或者被反序 ...
- 【React】开发一个城市选择控件
想到做这个,是因为无意中在github上看到了这一个仓库https://github.com/lunlunshiwo/ChooseCity,做的就是一个城市选择控件,是用vue写的,说的是阿里的一道题 ...
- Shell 从日志文件中选择时间段内的日志输出到另一个文件
Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...
- 算法战斗:给定一个号码与通配符问号W,问号代表一个随机数字。 给定的整数,得到X,和W它具有相同的长度。 问:多少整数协议W的形式和的比率X大?
如果说: 给定一个号码与通配符问号W,问号代表一个随机数字. 给定的整数,得到X,和W它具有相同的长度. 问:多少整数协议W的形式和的比率X大? 进格公式 数据的多组,两排各数据的,W,第二行是X.它 ...
随机推荐
- [CODEVS1205]单词反转
给出一个英语句子,希望你把句子里的单词顺序都翻转过来 这个题算是第二次做了……第二次用的C++然而还是写不出来 思路1:用一个数组把读过去的单词存起来,再逆序输出即可 思路2:读入句子后,先在句子开头 ...
- 十步优化SQL Server中的数据访问
原文发布时间为:2011-02-24 -- 来源于本人的百度文章 [由搬家工具导入] 转载:http://tech.it168.com/a2009/1125/814/000000814758_all. ...
- 在SQL Server中使用NewID()随机取得某行
原文发布时间为:2008-09-24 -- 来源于本人的百度文章 [由搬家工具导入] 这里提供了另外一个更有用的函数:NewID(),它返回一个GUID(全局唯一标志符) select top 10 ...
- mybatis hashmap 输入键值对为空时,key 丢失
参考文档:https://blog.csdn.net/lulidaitian/article/details/70941769 springMVC+mybatis查询数据,返回resultType=” ...
- MySql视图笔记(转载)
1. 视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚拟存在的表.视图就像一个窗口(数据展示的窗口),通过这个窗口,可以看到系统专门提供的数据(也可以查看到数据表的全部数据),使 ...
- python print的参数介绍
参考print的官方文档 print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints th ...
- C#使用DirectoryEntry类操作Windows帐户
1.创建windows帐户 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /// <summary> /// 创建Windows帐户 /// </summa ...
- hdu 1573(中国剩余定理)
X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Cryptography I 学习笔记 --- 认证加密
1. 认证加密,Alice与Bob共享一个密钥k,Alice可以发送密文E给Bob,Bob可以确定接收到的E一定是拥有密钥k的Alice产生的.而不是攻击者随便产生的. 2. 认证加密必须能抵挡住选择 ...
- P1450 包裹快递 RP+14【二分】
[题目链接]:https://vijos.org/p/category/%E5%85%B6%E4%BB%96,%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE 描述 一个快递公 ...