#include <string>
#include <vector>
using namespace std;
class Prerequisites{
public:
int iFrom(string sInput)
{
int i=0,Total=0,Mul=100;
for(;sInput[i]!=':';i++)
{
if(sInput[i]<65)
{
Total+=(sInput[i]-48)*Mul;
Mul=Mul/10;
}
}
return Total;
}
string sFrom(string sInput)
{
int i=0;
string sRes = "";
for(;sInput[i]>=65;i++)
{
sRes[i]=sInput[i];
}
return sRes;
}
int iNum(string sInput)
{
int i=0,iCount=0;
for(i=0;sInput[i]!='\0';i++)
{
if(sInput[i]==' ')
{
iCount++;
}
}
return iCount;
}
vector<string> orderClasses(vector<string> param0)
{
int OnOff=0,iPre=0,iFound=0;
vector<string> vecReturn;
vector<string>::iterator iteReturn;
vector<string>::iterator iteAll, iteTemp, iteStart;
for(iteAll=param0.begin();iteAll!=param0.end();iteAll++)
{
if(iNum(*iteAll)==0)
{
iFound=1;
param0.insert(param0.begin(),*iteAll);
param0.erase(iteAll);
break;
}
}
if(iFound==0)
{
param0.clear();
return param0;
}
for(iteAll=param0.begin()+1;iteAll!=param0.end();iteAll++)
{
OnOff=0;
for(iteTemp=iteAll;iteTemp!=param0.end();iteTemp++)//Search the Node after the checked ones
{
for(iteStart=param0.begin();iteStart!=iteAll+1;iteStart++)//Check whether the prequest are fullfilled
{
if((*iteTemp).find(*iteStart,0)!=string::npos)
{
iPre++;
}
if(iPre==iNum(*iteTemp))//All the prerequest been fullfilled
{
OnOff=1;
for(;iteStart!=iteAll+1;iteStart++)//Put the new found Node that fullfill all the prerequest in right order
{
if(iFrom(*iteTemp)<iFrom(*iteStart))
{
param0.insert(iteStart,*iteTemp);
param0.erase(iteTemp);
break;
}
else if(iFrom(*iteTemp)==iFrom(*iteStart))
{
if(sFrom(*iteTemp)<sFrom(*iteStart))//这里可以不用sFrom. 用系统:memcmp()
{
param0.insert(iteStart,*iteTemp);
param0.erase(iteTemp);
break;
}
}
if(iteStart==iteAll)
{
param0.insert(iteAll,*iteTemp);
param0.erase(iteTemp);
}
}
}
}
}
if(OnOff==0)
{
param0.clear();
return param0;
}
}
for(iteAll=param0.begin();iteAll!=param0.end();iteAll++)
{
vecReturn.push_back(sFrom(*iteAll));
}
return vecReturn;
}
};
第三个算法题: Prerequisites
最新推荐文章于 2024-07-24 20:25:39 发布