Chinaunix首页 | 论坛 | 博客
  • 博客访问: 114847
  • 博文数量: 23
  • 博客积分: 495
  • 博客等级: 下士
  • 技术积分: 252
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-05 20:44
文章分类
文章存档

2011年(23)

分类: C/C++

2011-08-16 21:46:01

      22.1-4 给定一个多重图G = (V, E)的邻接表表示,给出一个具有O(V+E)时间的算法,来计算其“等价”的无向图G' = (V, E')的邻接表表示,其中E'包哈E中所有的边,且将两个顶点之间的所有所有多重边用一条边代表,并去掉E中所有的环。

该算法如下:
typedef struct node
{
int data;
struct node *pre;
struct node *next;
}VNode;

void Transpose(VNode Adj[], VNode newAdj[], int V)
{
int i;
for(i = 0; i < V; i++)
{
VNode *p = Adj[i].next;
VNode *tmp;
while(p != NULL)
{
/* 消去环和多重边 */
while(p->data == Adj[i].data || p->pre->data == p->data)
{
tmp = p->pre->next = p->next;
free(p);
p = tmp;
}
p = p->next;
}
}
}

该算法的实现,请参考: Python实现多重图转简单图
阅读(2436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~