向前星

//前向星
#define N_node 1000 //点的个数
#define N_edge 5000 //边的条数

typedef struct           //节点信息
{                   
     int to ,next;        //to 点,next E中下标信息
     int cost;            //当前边的权值
}STAR;

STAR E[N_edge];          //节点信息数组
int list[N_node];        //记录该点所连接的一系列点中的一个的E数组下标
int tot;                 //记录当前E数组已经用到下标几了

void add(int a ,int b ,int c)   //添加一条a 到 b 的权值为c的边
{
     E[++tot].to = b;       //创建出当前节点b     
     E[tot].cost = c;       //到达当前节点的权值
     E[tot].next = list[a]; //把当前节点插入到与a相连的所有点的最前方
     list[a] = tot;         //节点a指向新加的,也就是插入到最前方的这个点
}

//存边之前记得把list数组清空,还有把list数组当前所有下标赋值成1
memset(list ,0 ,sizeof(list));
tot = 1;

//遍历,输出点a所连接的所有点b

for(int k = list[a] ;k ;k = E[k].next) //从头开始一个一个的遍历与点a相连的所有点
{
     int b = E[k].to;
     printf("%d\n" ,b);
}


 

 

posted @ 2017-04-04 21:32  ouyang_wsgwz  阅读(193)  评论(0编辑  收藏  举报