C++算法 链式前向星存图

这个东西恶心了我一阵子,那个什么是什么的上一个一直是背下来的,上次比赛忘了,回来有个题也要用,只能再学一遍,之前也是,不会为什么不学呢。我觉得是因为他们讲的不太容易理解,所以我自己给那些不会的人们讲一讲。

首先,链式前向星存图用3个变量,一个数组。3个变量分别是,zd:路径的终点,cd:路径的长度,net:他开头一样的上一个路径是第几条。那个数组我们叫他h,h[i]表示上一次从i开始走是第几次输入。

h有点难理解,比如有一个路径,从1到3,从1开始,这又是第1个,net标记完后,h[1]就会被替换成1。h[i]原来是0,表示没有出现过从i开始的路径。

然后又遇到了一个路径,是从1到5,上一次从1出发是1,把他的net标记成h[1]的值,他是第二个,h[1]就会被替换成2,以此类推。

void hanshu(long long t,long long w,long long c)//t是出发点,w是终点,c是长度
{
	a[bl].net=sz[t];//net标记成t上一次出现的位置
	a[bl].cd=c;//第bl条线的长度
	a[bl].wei=w;//第bl条线的终点
	sz[t]=bl;//标记上一个出现的t是他自己,指向它。
	bl++;
} 

输入:

hanshu(kt,jw,cd);
//3个参数分别表示开头,终点和长度。
//如果是无向图,还要加下面的一行。
hanshu(jw,kt,cd);

然后就是结尾。

for(int i=sz[x];i!=0;i=sz[x].net)//x是你要找的出发点,如果i是0,就表示他是第一个,终止。否则i就会指向上一个开头是x的位置。
{
  //想要什么就写什么。
}

结束了。快去试试吧。

原文地址:https://www.cnblogs.com/lichangjian/p/12368896.html