Description
随着共享经济的兴起,大学城如今到处可见ofo小黄车. 小左现在打算每天都骑小黄车从宿舍去实验室. 假设大学城的地图可以简化为一个有向图,图中有N个地点(节点),用0到N-1进行编号,有些地点之间存在有向的道路(有向边). 小左的宿舍所在地点编号为0,实验室所在地点编号为N-1. 小左希望为连续的M天规划线路,使得每天从宿舍到图书馆,都至少会经过一条之前没有走过的道路(有向边). 小左想知道M的最大值,你能帮助他么?
请实现下面Solution类中的countPath函数,完成上述功能.
参数G: N*N(2 <= N <= 50)邻接矩阵,如果地点i到地点j之间有道路,则G[i][j] = 1;否则G[i][j] = 0. G[i][i]的值总是为0.
返回值:M的最大值. 如果不存在满足要求的路径则返回0.
class Solution {
public:
int countPaths(vector<vector<int>> G) {
};
例1:
G = {
{0, 1}, {1, 0}},返回值为2,因为第1天:0 –> 1,第2天 0 –> 1 –> 0 –> 1. 虽然小左第2天兜了一下圈,但他确实走了一条第1天没有走过的边1 –> 0.
例2:
G = {
{0, 1, 1}, {1, 0, 1}, {1, 0, 0}},返回值为4.
第1天:0 –> 2
第2天:0 –> 2 –> 0 –> 2
第3天:0 –> 1 –> 2
第4天:0 –> 1 –> 0 –> 1 –> 2
例3:
G = {
{0, 1, 0}, {1, 0, 0}, {0, 0, 0}},返回值为0.
注意:
1. 你只需要提交Solution类的代码,你在本地可以编写main函数测试程序&#x