您的位置:首页 > 其它

小谈汉字转换成拼音辅助函数和辅助类

2011-05-16 22:02 288 查看
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);
}
//去掉字符串后面的空白符
}


 

 

 

#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);
};


 

#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: