图求最短路径
来源:互联网 发布:淘宝号权重值是什么 编辑:程序博客网 时间:2024/06/05 19:12
class DeepTrace{public: void InitMap(const vector<vector<int> > vMap, const int &portNum) { m_map = vMap; m_portNum = portNum; m_traceTree.clear(); } bool GetRule(const int &beginPos, const int &endPos, list<int> &rules) { if(beginPos <0 || beginPos >= m_portNum) return false; if(endPos <0 || endPos >= m_portNum) return false; m_traceTree.clear(); vector<bool> hasWalk(m_portNum, false); queue<int> q; q.push(beginPos); m_traceTree.push_back(make_pair(beginPos, -1)); int nPos = 0; while(!q.empty()) { int nowPos = q.front(); q.pop(); hasWalk[nowPos] = true; if(nowPos == endPos) { print_rule(nPos, rules); return true; } vector<int> tmp = m_map[nowPos]; vector<int> :: const_iterator pos = tmp.begin(); const int parent = nPos;//m_traceTree.size() - 1; for(;pos != tmp.end(); ++pos) { if(false == hasWalk[*pos]) { q.push(*pos); m_traceTree.push_back(make_pair(*pos,parent)); } } ++nPos; } return false; }private://nPos是树的位置, 从树的某个节点开始,回溯到开始节点 void print_rule(int nPos, list<int> &rules) { if(nPos < 0 || nPos >= m_traceTree.size()) return; int index = 0; do { rules.push_front(m_traceTree[nPos].first); ++index; nPos = m_traceTree[nPos].second; //for(int i= 0; i < 11; i++) //cout<< m_traceTree[i].first << m_traceTree[i].second <<endl; //cout<< "npos " << nPos <<endl;; }while(index <= m_traceTree.size() && m_traceTree[nPos].second != -1); return; } vector<vector<int> > m_map; int m_portNum; vector<pair<int, int> > m_traceTree; //valie ,parentindex};int main(){ vector<int> tmp; vector<vector<int > > vMap; //0 tmp.push_back(1); tmp.push_back(2); vMap.push_back(tmp); //1 tmp.clear(); tmp.push_back(3); tmp.push_back(5); vMap.push_back(tmp); //2 tmp.clear(); tmp.push_back(0); tmp.push_back(3); vMap.push_back(tmp); //3 tmp.clear(); tmp.push_back(1); tmp.push_back(2); tmp.push_back(4); tmp.push_back(6); vMap.push_back(tmp); //4 tmp.clear(); tmp.push_back(3); tmp.push_back(7); vMap.push_back(tmp); //5 tmp.clear(); tmp.push_back(1); tmp.push_back(6); vMap.push_back(tmp); //6 tmp.clear(); tmp.push_back(3); tmp.push_back(5); tmp.push_back(7); vMap.push_back(tmp); //7 tmp.clear(); tmp.push_back(4); tmp.push_back(6); vMap.push_back(tmp); DeepTrace obj; obj.InitMap(vMap, 8); list<int> listRules; bool findit = obj.GetRule(0, 7, listRules); list<int> ::const_iterator pos = listRules.begin(); cout<< "----------" <<endl; for(; pos != listRules.end(); ++pos) { cout<< *pos << " " <<endl; }
图的数据结构组织形式:
vector < vector< int > >
0-》1,2
1-》3,5
2-》0,3
3-》1,2,4,6
4-》3,7
5-》1,6
6-》3,5,7
7-》4,6
0 0
- 图求最短路径
- 利用图求最短路径
- 路径
- 路径
- 路径
- 路径
- 路径
- 路径
- 路径
- 路径
- 路径
- 【 路径 】
- 路径
- 路径
- 路径
- 路径
- 路径
- 路径
- 【SSH快速进阶】——Struts2数据校验
- FMDB实战
- 零字节WSASend,WSARecv
- Finding Team Member
- 程序人生记录Linux一些事
- 图求最短路径
- JSP中getParameter()和getAttribute()的区别
- ThreadPoolExecutor线程池使用介绍
- Hibernate笔试面试题
- ActionBar初识
- Java 异常的处理
- Linux更改文件及组的命令
- JAVA架构师面试分享—链家网
- 腾讯2015年秋招一面