1 2 3 4 5 6 7 8 9 10 | void StringManipulation::TrimString(string &str, const string val) { str.erase(0,str.find_first_not_of(val)); //去掉字符串前面的空白符 int pos=str.find_last_not_of(val)+val.size(); if (pos<str.size()) { str.erase(pos); } //去掉字符串后面的空白符 } |
1 2 3 4 5 6 7 8 9 10 11 | #pragma once #include "common.h" class GraphRepresentation { public : GraphRepresentation( void ); ~GraphRepresentation( void ); map< int ,string>Vertex; map<pair< int , int >,string>GraphR; void GetPaths(vector<vector< int >>&paths, int beginindex, int endindex); }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | #include "StdAfx.h" #include "GraphRepresentation.h" GraphRepresentation::GraphRepresentation( void ) { } GraphRepresentation::~GraphRepresentation( void ) { } void GraphRepresentation:: GetPaths(vector<vector< int >>&paths, int beginindex, int endindex) { stack< int >mystack; vector< int > singlepath; int *vertexsStatus= new int [Vertex.size()]; //0,未在栈内,1已经在栈内。 map<pair< int , int >, int >arcstatus; for ( int i=0;i<Vertex.size();i++) { vertexsStatus[i]=0; } for (map<pair< int , int >,string>::iterator it=GraphR.begin();it!=GraphR.end();it++) { arcstatus[it->first]=0; } mystack.push(beginindex); vertexsStatus[beginindex]=1; int justpopup=-1; //保存刚刚出栈的元素 while (!mystack.empty()) { int elem=mystack.top(); if (elem==endindex) //出栈的第一个条件找到了目的节点 { //以下代码完成栈的遍历 while (!mystack.empty()) { int tmp=mystack.top(); mystack.pop(); singlepath.push_back(tmp); } for (vector< int >::reverse_iterator rit=singlepath.rbegin();rit!=singlepath.rend();rit++) { mystack.push(*rit); } paths.push_back(singlepath); singlepath.clear(); vertexsStatus[elem]=0; for ( int k=0;k<Vertex.size();k++) { if (vertexsStatus[k]==0) { if (arcstatus.count(make_pair(elem,k))) { arcstatus[make_pair(elem,k)]=0; } } } mystack.pop(); } else { int i=0; for (;i<Vertex.size();i++) { if (GraphR.count(make_pair(elem,i))&&vertexsStatus[i]==0&&arcstatus[make_pair(elem,i)]==0) { mystack.push(i); vertexsStatus[i]=1; arcstatus[make_pair(elem,i)]=1; //graphR.erase(make_pair(elem,i)); break ; } } if (i==Vertex.size()) //出栈的第二个条件,没有可以往栈内添加的后续节点了。 { int elemtmp=mystack.top(); vertexsStatus[elemtmp]=0; for ( int k=0;k<Vertex.size();k++) { if (vertexsStatus[k]==0) { if (arcstatus.count(make_pair(elemtmp,k))) { arcstatus[make_pair(elemtmp,k)]=0; } } } mystack.pop(); } } } delete vertexsStatus; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步