参考代码: 复杂度为O(V+E)
void Unweight(struct graph *g,string v)
{
int *mask= new int[g->n];
int i;
int n;
int num=0;
for(i=0;i<g->n;i++)
{
mask[i]=0;
if(VName[i]==v)
n=i;
}
num++;
queue<int>q;
q.push(n);
mask[n]=-1;
while(!q.empty()&&num<g->n)
{
int tt=q.front();
q.pop();
struct edge *h=g->v[tt].list;
while(h!=NULL)
{
if(mask[h->vertex] == 0)
{
num++;
if(mask[tt]==-1)
mask[h->vertex]=1;
else
mask[h->vertex]=mask[tt]+1;
q.push(h->vertex);
}
h=h->next;
}
}
cout<<v<<"to different vertex step is "<<endl;
for(i=0;i<g->n;i++)
{
int tt;
if(mask[i]==-1)
tt=0;
else if(mask[i]==0)
tt=65535;
else
tt=mask[i];
cout<<VName[i]<<": "<<tt<<endl;
}
}