随笔 - 404  文章 - 0  评论 - 1037  阅读 - 136万 

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;
 
}
posted on   finallyly  阅读(785)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示