咳咳……问题在memset上。
memset函数是将字节直接填充到内存里,所以如果`memset(dis,1,sizeof(dis))`的话,dis数组不会被初始化成1。类似的,你这里的dis数组也不会初始化成`99999999`。
事实上,因为`99999999`的二进制表示是`101 1111 0101 1110 0000 1111 1111`,在传入`memset`的时候,因为`memset`的第二个参数接收`char`类型的值,于是进行强制类型转换,只截取后一个字节,即`1111 1111`,填充后`dis`数组的初值即为`-1`,可以看见它永远不会被更新。
因此,如果将`memset`中的`inf`改为`0x7f`,并且将`dis[1]`设置为0,就好了。
by 木木! @ 2019-05-10 18:52:23
抱歉……事实上在这段程序的逻辑里`dis[1]`不用被初始化成1。
不过建议将外面的第一层处理`f=1`的循环合并到大while里(这样会好看一些),并且能用局部变量和返回值就不用全局变量(这样会避免莫名其妙的bug)。
by 木木! @ 2019-05-10 18:56:23
~~
by swl最帅了 @ 2019-05-10 21:41:03
@[木木!](/space/show?uid=49458) 谢QAQ
by 阿沐 @ 2019-05-10 21:43:17
@[阿沐](/space/show?uid=81512) 这都不会,你真是一个蒟蒻
(-> _ ->)~~好吧,其实我也不会~~
by darklove @ 2019-05-10 21:44:23
a
by Kevin_Wa @ 2019-05-12 20:22:07