博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Find the longest route with the smallest starting point
阅读量:5064 次
发布时间:2019-06-12

本文共 2156 字,大约阅读时间需要 7 分钟。

前提:对于一个给定的二维整数矩阵,如果一个元素i的某个4-相邻位置上的另一个元素j正好值为i-1则i到j可以形成一条通路。

输入:M个N*N整数矩阵

输出:对于每个输入的矩阵,输出 矩阵中可形成的最长通路长度 及 在该最长通路长度的情况下最小的起始点值

 e.g.

input:

4 5 6 1 2 3 7 0 5 8 2 1 6 7 3 4

 

 

output:

4 0

 

idea:

遍历输入矩阵中每个位置,compute()计算以该位置为起点的最长route长度->找出 最长route长度 及 该长度下最小的起点值。

compute(r,c)

 

traverse 4个方向上的相邻位置:       if 当前位置到该相邻位置(nr,nc)可以形成通路(input[r][c]==input[nr][nc]-1)             neighbor_route_length:=compute(nr,nc)       end    end if traverse 完4个方向上都没形成任何通路,返回0     else 有找到通路,返回 neighbor_route_length的最大值+1

 

 

-----------------------------------分割线

 

可以引入缓存矩阵buffer[N][N]作为hash table存储先前计算过的compute(r,c)值

i.e. 对于某个确定可以形成通路的相邻位置(nr,nc),如果buffer中有缓存已经计算过的route_length值,则不再调用compute,直接提取buffer[nr][nc]。

compute2(r,c)

traverse 4个方向上的相邻位置:       if 当前位置到该相邻位置(nr,nc)可以形成通路(input[r][c]==input[nr][nc]-1)            if  buffer[nr][nc]已有记录                neighbor_route_length:=buffer[nr][nc]            else //没有记录                neighbor_route_length:=compute(nr,nc)            end       end    end if traverse 完4个方向上都没形成任何通路,返回0     else 有找到通路,返回 neighbor_route_length的最大值+1

 

 

code:

class Solution {  public:    pair
getAnswer(vector
> input) { int N=input.size(); vector
> buffer(N,vector
(N,-1)); int longest_length=-1, starting_point=-1; for (int r=0;r
longest_length|| (current_length==longest_length&&starting_point>input[r][c])) { longest_length=current_length; starting_point=input[r][c]; } } } return pair
(longest_length, starting_point); } //虽然突然想起好像原始题目是每个位置的所有4个方向中只有最多一条通路 //但是因为比较无聊就加大一点难度:每个位置有可能有多条通路 要找出最长的一条 罢了 //what if there might be more than 1 route from a starting point int compute_route(int N, vector
>& input, vector
>& buffer, int r, int c) { int neighbors[4][2]={ {r-1,c},{r,c-1},{r,c+1},{r+1,c}}; int neighbor_route_length=-1, answer; for (int i=0;i<4;i++) { int neighbor_r=neighbors[i][0], neighbor_c=neighbors[i][1]; if (neighbor_r>=0&&neighbor_r
=0&&neighbor_c

 

转载于:https://www.cnblogs.com/RDaneelOlivaw/p/10849257.html

你可能感兴趣的文章
303. Range Sum Query - Immutable
查看>>
20169217 《Linux内核原理与分析》第七周作业
查看>>
{面试题49} 把字符串转换成整数
查看>>
EX35
查看>>
http://www.myexception.cn/web/426486.html
查看>>
hdu 3501 欧拉函数
查看>>
flex4 s:Datagrid <s:typicalItem
查看>>
[AHOI2008] 紧急集合
查看>>
快读代码
查看>>
Cisco配置单臂路由及静态路由
查看>>
POJ 1002 487-3279
查看>>
Rain and Umbrellas(dp)
查看>>
王长松:传统文化与中医养生(东南大学)汇总
查看>>
Yet Another Multiple Problem 同余定理 bfs
查看>>
单点登录的实现原理
查看>>
工作中男女程序员对比,没注意原来差距这么大!你中招了吗?
查看>>
v1.0.2-2017.04.26
查看>>
仿微信未读RecyclerView平滑滚动定位效果
查看>>
Hdu CRB and Queries(整体二分)
查看>>
走进异步世界:博客程序的异步化改造以及发布后的不理想情况
查看>>