数据结构可以选择用前向星的方式存储一个图。前向星的原理是:把图拆分为几个部分:1.用一个堆栈去存储节点的最后一个边;2用另一个堆栈存储节点的最后一个相关联的边;3用一个堆栈来存储2中的边指向的节点,例如 1a2 传参a 返回节点2.
下边是代码:
struct graph{
typedef vector<int > VI;
VI info,next,to;
graph(int n=0,int m=0):to(0),next(0)
{
info.resize(n);
next.reserve(m);
to.reserve(m);
}
int edge_size()//返回边数
{
return to.size();
}
int vector_size()//得到节点个数
{
return info.size();
}
void expand(int i)//加入节点
{
if(info.size()<i+1)
{
info.resize(i+1);
}
}
void add(int i,int j)
{
expand(i),expand(j);
to.push_back(j);//最后一条边指向的节点
next.push_back(info(i));//压入上一个边
info[i]=to.size()-1;//把新的边作为值
}
void delback()
{
int i;
for(i=0;i<info.size();i++)
{
if(info[i]==to.size()-1)
{ info[i]=next.back();
break;
}
}
to.pop_back();
next.pop_back();
}
void clear()
{
info.clear();//节点数不变,边删除
next.resize(0);
to.resize(0);
}
};