pbewithmd5anddes算法 对应.net_编程小白暑期进阶笔记45-C语言数据结构与算法最短路径和dijkstra算法...

最短路径

2966caf3b176753ef4ef43b65d88ec94.png

24f51ba0d0c93a1a653a7479a6f80398.png

算法特点:

迪科斯彻算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。

算法思路:

Dijkstra算法采用的是一种贪心的策略,声明一个数组dis来保存源点到各个顶点的最短距离和一个保存已经找到了最短路径的顶点的集合:T,初始时,原点 s 的路径权重被赋为 0 (dis[s] = 0)。若对于顶点 s 存在能直接到达的边(s,m),则把dis[m]设为w(s, m),同时把所有其他(s不能直接到达的)顶点的路径长度设为无穷大。初始时,集合T只有顶点s。

然后,从dis数组选择最小值,则该值就是源点s到该值对应的顶点的最短路径,并且把该点加入到T中,OK,此时完成一个顶点,

然后,我们需要看看新加入的顶点是否可以到达其他顶点并且看看通过该顶点到达其他点的路径长度是否比源点直接到达短,如果是,那么就替换这些顶点在dis中的值。

然后,又从dis中找出最小值,重复上述动作,直到T中包含了图的所有顶点。

原文链接:https://blog.csdn.net/qq_35644234/article/details/60870719

06ce2db8c19dbf8182d17643d5468dbc.png

f90762164003a4fb046d121ab0de7adb.png

812e3a145f3ced83611bd889fc280027.png

9f0191744523a7590b705718e37f27aa.png

28a12db8db1a48b31867db60e692a0c2.png

e1c011b779b0d2900885e8979195fd71.png

47c0669f6b0548c777aef076c1331eff.png

b8b937320df6a407306e861246e2239e.png

80784139327c0dd82eafc8b9c82b471c.png

15bc4276ff222782dca02b3b274ed17f.png

021903a984f57228448e5324755c34ae.png

b0538e94eec19f4519bd5adadcfed414.png

806719abe21b25dd86e541cf05738282.png

027a1181db8f06b72462b2ff0031b251.png

python版本:https://zhuanlan.zhihu.com/p/35976233

8f9b273aa48caba662c053dba3dddbaa.png

c7964bd280f14d1bfc5394f8acc39511.png

038351edd606f1cf950536e55493f782.png

为什么dijkstra算法处理不了带有负权值的边的图?
下面说法有点道理但也有漏洞,供参考:

c9c26e8193077c23acbd779005be61bb.png

例子:

256b22b20314286422e45337829b31a9.png

思考题:Dijkstra可以求带权无向图最短路径么

可以

PBEWITHMD5andDES算法是一种基于口令的加密算法,它使用MD5和DES算法进行加密。下面是一个使用PBEWITHMD5andDES算法进行加密的示例: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.PBEParameterSpec; import java.security.spec.AlgorithmParameterSpec; import java.security.spec.KeySpec; public class PBEDemo { public static void main(String[] args) throws Exception { String password = "mypassword"; String plaintext = "Hello, world!"; // 生成随机盐值 byte[] salt = new byte[8]; SecureRandom random = new SecureRandom(); random.nextBytes(salt); // 创建PBE密钥 KeySpec keySpec = new PBEKeySpec(password.toCharArray()); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHMD5andDES"); SecretKey secretKey = keyFactory.generateSecret(keySpec); // 创建PBE参数 AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, 1000); // 创建加密器 Cipher cipher = Cipher.getInstance("PBEWITHMD5andDES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec); // 加密数据 byte[] ciphertext = cipher.doFinal(plaintext.getBytes()); System.out.println("Plaintext: " + plaintext); System.out.println("Ciphertext: " + Base64.getEncoder().encodeToString(ciphertext)); } } ``` 这个示例中,我们使用了Java的加密库来实现PBEWITHMD5andDES算法的加密。首先,我们生成一个随机的盐值,然后使用口令生成PBE密钥。接下来,我们创建PBE参数,并使用密钥和参数初始化加密器。最后,我们使用加密器对明文进行加密,并输出密文。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值