原题连接:http://poj.org/problem?id=2367
思路:拓扑排序
#include<stdio.h>
#include<stdlib.h>
typedef struct vert
{
int num; //结点编号
struct vert* next;
}G_v;
typedef struct node
{
int InDgree,OutDgree; //出度和入度
G_v* next;
}G_n;
G_n P[101]; //结点
int main(void)
{
G_v *tmp;
G_v *q;
int n,i,a,j,count;
scanf("%d",&n);
for(i = 0;i <= n;i ++)
{
P[i].next = NULL;
P[i].InDgree = P[i].OutDgree = 0;
}
i = 1;
while(i <= n)
{
tmp = P[i].next;
while(scanf("%d",&a)&&a != 0)
{
P[i].OutDgree ++;
P[a].InDgree ++;
q = (G_v*)malloc(sizeof(G_v));
q->num = a;
q->next = NULL;
if(tmp == NULL)
{
P[i].next = q;
tmp = P[i].next;
}
else
{
tmp->next = q;
tmp = tmp->next;
}
}
i ++;
}
count = 1;
for(i = 1;i <= n;i ++)
{
if(P[i].InDgree == 0)
{
if(count++ == n)
{
printf("%d\n",i);
break;
}
else
printf("%d ",i);
tmp = P[i].next;
while(tmp)
{
P[tmp->num].InDgree --;
tmp = tmp->next;
}
P[i].InDgree = 200;
i = 0;
}
}
return 0;
}

本文通过使用拓扑排序算法解决POJ在线编程平台上的问题。详细介绍了算法的实现步骤,包括节点初始化、边的读取以及如何利用拓扑排序进行问题求解。文章最后提供了代码实现和实例分析。

277

被折叠的 条评论
为什么被折叠?



