#include <vector>
#include <deque>
#include <list>
#include <algorithm>
#include <map>
#include <iostream>
/*
* A
* B C
* D E F
* G
*
* meghdar avalie : (A,B),(A,C)
* gostraresh (A,B) (A,C),(A,B,D),(A,B,E)
* (A,B,D),(A,B,E),(A,C,F)
* (A,B,E),(A,C,F),(A,B,D,G)
* (A,C,F),(A,B,D,G)
* (A,B,D,G)
* ...
*/
using AdjList=std::vector<std::vector<size_t>>;
std::vector<size_t> findMaxDistance(const AdjList& adjList)
{
std::deque<std::vector<size_t>> remain_nodes;
//meghdar avalie
for(size_t i=0;i<adjList[0].size();i++)
{
std::vector<size_t> pval;
pval.push_back(0);
pval.push_back(adjList[0][i]);
remain_nodes.push_back(pval);
}
//
std::vector<size_t> max_dist=remain_nodes[0];//for storing the longest path
while(remain_nodes.size() > 0 )
{
int Node=remain_nodes[0][remain_nodes[0].size()-1];//last node the list
//expand first pair
if(Node<adjList.size()){
for(size_t i=0;i<adjList[Node].size();i++){
if(std::find(remain_nodes[0].begin(),
remain_nodes[0].end(),adjList[Node][i])==remain_nodes[0].end()){
std::vector<size_t> temp=remain_nodes[0];
temp.push_back(adjList[Node][i]);
remain_nodes.push_back(std::move(temp));
}
}
}
//if expanded node is bigger than max_dist put it in max_dist
if(remain_nodes[0].size()>max_dist.size())
max_dist=remain_nodes[0];
// remove expanded node
remain_nodes.pop_front();
}
return max_dist;
}
int main()
{
//graph shekl bala
AdjList adjList({ {1,2},
{3,4},
{5},
{6}
});
std::vector<size_t> result=findMaxDistance(adjList);
std::map<int,std::string> Names;
Names[0]="A";Names[1]="B";Names[2]="C";
Names[3]="D";Names[4]="E";Names[5]="F";
Names[6]="G";
for(auto i:result){
std::cout<<Names[i];//result ABDG
}
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGRlcXVlPgojaW5jbHVkZSA8bGlzdD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGlvc3RyZWFtPgovKgogKiAgICAgICAgICAgIEEKICogICAgICAgICAgQiAgIEMKICogICAgICAgIEQgIEUgICBGCiAqICAgICAgIEcKICoKICogbWVnaGRhciBhdmFsaWUgOiAgKEEsQiksKEEsQykKICogZ29zdHJhcmVzaCAoQSxCKSAgKEEsQyksKEEsQixEKSwoQSxCLEUpCiAqICAgICAgICAgICAgICAgICAgIChBLEIsRCksKEEsQixFKSwoQSxDLEYpCiAqICAgICAgICAgICAgICAgICAgIChBLEIsRSksKEEsQyxGKSwoQSxCLEQsRykKICogICAgICAgICAgICAgICAgICAgKEEsQyxGKSwoQSxCLEQsRykKICogICAgICAgICAgICAgICAgICAgKEEsQixELEcpCiAqICAgICAgICAgICAgICAgICAgICAgLi4uCiAqLwoKdXNpbmcgQWRqTGlzdD1zdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxzaXplX3Q+PjsKCnN0ZDo6dmVjdG9yPHNpemVfdD4gIGZpbmRNYXhEaXN0YW5jZShjb25zdCBBZGpMaXN0JiBhZGpMaXN0KQp7CiAgICBzdGQ6OmRlcXVlPHN0ZDo6dmVjdG9yPHNpemVfdD4+IHJlbWFpbl9ub2RlczsKCiAgICAvL21lZ2hkYXIgYXZhbGllCiAgICBmb3Ioc2l6ZV90IGk9MDtpPGFkakxpc3RbMF0uc2l6ZSgpO2krKykKICAgIHsKICAgICAgICBzdGQ6OnZlY3RvcjxzaXplX3Q+IHB2YWw7CiAgICAgICAgcHZhbC5wdXNoX2JhY2soMCk7CiAgICAgICAgcHZhbC5wdXNoX2JhY2soYWRqTGlzdFswXVtpXSk7CiAgICAgICAgcmVtYWluX25vZGVzLnB1c2hfYmFjayhwdmFsKTsKCiAgICB9CiAgICAvLwoKICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gbWF4X2Rpc3Q9cmVtYWluX25vZGVzWzBdOy8vZm9yIHN0b3JpbmcgdGhlIGxvbmdlc3QgcGF0aAoKICAgIHdoaWxlKHJlbWFpbl9ub2Rlcy5zaXplKCkgPiAwICkKICAgIHsKICAgICAgICBpbnQgTm9kZT1yZW1haW5fbm9kZXNbMF1bcmVtYWluX25vZGVzWzBdLnNpemUoKS0xXTsvL2xhc3Qgbm9kZSAgdGhlIGxpc3QKICAgICAgICAvL2V4cGFuZCBmaXJzdCBwYWlyCiAgICAgICAgaWYoTm9kZTxhZGpMaXN0LnNpemUoKSl7CiAgICAgICAgICAgIGZvcihzaXplX3QgaT0wO2k8YWRqTGlzdFtOb2RlXS5zaXplKCk7aSsrKXsKICAgICAgICAgICAgICAgIGlmKHN0ZDo6ZmluZChyZW1haW5fbm9kZXNbMF0uYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5fbm9kZXNbMF0uZW5kKCksYWRqTGlzdFtOb2RlXVtpXSk9PXJlbWFpbl9ub2Rlc1swXS5lbmQoKSl7CiAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiB0ZW1wPXJlbWFpbl9ub2Rlc1swXTsKICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2hfYmFjayhhZGpMaXN0W05vZGVdW2ldKTsKICAgICAgICAgICAgICAgICAgICByZW1haW5fbm9kZXMucHVzaF9iYWNrKHN0ZDo6bW92ZSh0ZW1wKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vaWYgZXhwYW5kZWQgbm9kZSBpcyBiaWdnZXIgdGhhbiBtYXhfZGlzdCBwdXQgaXQgaW4gbWF4X2Rpc3QKICAgICAgICBpZihyZW1haW5fbm9kZXNbMF0uc2l6ZSgpPm1heF9kaXN0LnNpemUoKSkKICAgICAgICAgICAgbWF4X2Rpc3Q9cmVtYWluX25vZGVzWzBdOwoKICAgICAgICAvLyByZW1vdmUgZXhwYW5kZWQgbm9kZQogICAgICAgIHJlbWFpbl9ub2Rlcy5wb3BfZnJvbnQoKTsKICAgIH0KICAgIHJldHVybiBtYXhfZGlzdDsKfQoKaW50IG1haW4oKQp7CiAgICAvL2dyYXBoIHNoZWtsIGJhbGEKICAgIEFkakxpc3QgYWRqTGlzdCh7IHsxLDJ9LAogICAgICAgICAgICAgICAgICAgICAgezMsNH0sCiAgICAgICAgICAgICAgICAgICAgICB7NX0sCiAgICAgICAgICAgICAgICAgICAgICB7Nn0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgIHN0ZDo6dmVjdG9yPHNpemVfdD4gcmVzdWx0PWZpbmRNYXhEaXN0YW5jZShhZGpMaXN0KTsKICAgIHN0ZDo6bWFwPGludCxzdGQ6OnN0cmluZz4gTmFtZXM7CiAgICBOYW1lc1swXT0iQSI7TmFtZXNbMV09IkIiO05hbWVzWzJdPSJDIjsKICAgIE5hbWVzWzNdPSJEIjtOYW1lc1s0XT0iRSI7TmFtZXNbNV09IkYiOwogICAgTmFtZXNbNl09IkciOwogICAgZm9yKGF1dG8gaTpyZXN1bHQpewogICAgICAgIHN0ZDo6Y291dDw8TmFtZXNbaV07Ly9yZXN1bHQgQUJERwogICAgfQp9Cg==