佛洛依德_佛洛依德算法 - CSDN
精华内容
参与话题
  • 最短路之——弗洛伊德算法(floyd)

    万次阅读 多人点赞 2018-06-12 19:47:25
    我们要做的是求出从某一点到达任意一点的最短距离,我们先用邻接矩阵来建图,map[i][j]表示从i点到j点的距离,把自己到自己设为0,把自己到不了的边初始化为无穷大,代码为:[cpp] view plain copy//初始化 for...

    来源: https://blog.csdn.net/riba2534/article/details/54562440


    我们要做的是求出从某一点到达任意一点的最短距离,我们先用邻接矩阵来建图,map[i][j]表示从i点到j点的距离,把自己到自己设为0,把自己到不了的边初始化为无穷大,代码为:

    1. //初始化  
    2.     for(int i=1; i<=n; i++)  
    3.         for(int j=1; j<=n; j++)  
    4.             if(i==j)  
    5.                 map[i][j]=0;  
    6.             else  
    7.                 map[i][j]=inf;  
    8.     //读入边  
    9.     for(int i=1; i<=m; i++)  
    10.     {  
    11.         scanf("%d%d%d",&t1,&t2,&t3);  
    12.         map[t1][t2]=t3;  
    13.     }  
    最后,建好的图可以用表格来表示:

    现在,我们来思考,假设我们来找一个中转的点,看他们的路程会不会改变,我们先以1号顶点作为中转点最为例子,制图:


    我们发现,图有了变化,我们怎么判断以1号顶点作为中转点图的路程是不是更短呢,我们只需要判断map[i][1]+map[1][j]的路程是不是比map[i][j]的路程更短,就可以判断,

    代码为:

    1. for(int i=1; i<=n; i++)  
    2.     for(int j=1; j<=n; j++)  
    3.         if(map[i][1]+map[1][j]<map[i][j])  
    4.             map[i][j]=map[i][1]+map[1][j];  
    现在该怎么办呢,我们接着以2号顶点作为中转点,很简单代码修改一句就就可以:

    1. for(int i=1; i<=n; i++)  
    2.     for(int j=1; j<=n; j++)  
    3.         if(map[i][2]+map[2][j]<map[i][j])  
    4.             map[i][j]=map[i][2]+map[2][j];  
    现在我们是不是发现了一个规律,只要不断的遍历每一个点,并且以每一个点作为中转点看看它的值会不会改变,就可以得到从一个点到任意一个点的最短路径,也就是多源最短路,这就是弗洛伊德算法,代码为:

    1. for(int k=1; k<=n; k++)  
    2.     for(int i=1; i<=n; i++)  
    3.         for(int j=1; j<=n; j++)  
    4.             if(map[i][k]+map[k][j]<map[i][j])  
    5.                 map[i][j]=map[i][k]+map[k][j];  
    这样就可以遍历每个顶点,找出所有的最短路,算法的复杂度为O(n^3).

    对于我一开始提出的问题,完整的代码为:

    1. #include <stdio.h>  
    2. #include <string.h>  
    3. #include <string>  
    4. #include <iostream>  
    5. #include <stack>  
    6. #include <queue>  
    7. #include <vector>  
    8. #include <algorithm>  
    9. #define mem(a,b) memset(a,b,sizeof(a))  
    10. using namespace std;  
    11. const int inf=1<<29;  
    12. int main()  
    13. {  
    14.     int map[10][10],n,m,t1,t2,t3;  
    15.     scanf("%d%d",&n,&m);//n表示顶点个数,m表示边的条数  
    16.     //初始化  
    17.     for(int i=1; i<=n; i++)  
    18.         for(int j=1; j<=n; j++)  
    19.             if(i==j)  
    20.                 map[i][j]=0;  
    21.             else  
    22.                 map[i][j]=inf;  
    23.     //读入边  
    24.     for(int i=1; i<=m; i++)  
    25.     {  
    26.         scanf("%d%d%d",&t1,&t2,&t3);  
    27.         map[t1][t2]=t3;  
    28.     }  
    29.     //弗洛伊德(Floyd)核心语句  
    30.     for(int k=1; k<=n; k++)  
    31.         for(int i=1; i<=n; i++)  
    32.             for(int j=1; j<=n; j++)  
    33.                 if(map[i][k]+map[k][j]<map[i][j])  
    34.                     map[i][j]=map[i][k]+map[k][j];  
    35.     for(int i=1; i<=n; i++)  
    36.     {  
    37.         for(int j=1; j<=n; j++)  
    38.             printf("%10d",map[i][j]);  
    39.         printf("\n");  
    40.     }  
    41.     return 0;  
    42. }  
    展开全文
  • matlab代码,佛洛依德算法求最短距离。
  • 佛洛依德

    2019-10-09 00:43:05
    这个春节在家粗略看了... 总的来说,佛洛依德总是把一些心理病归结于性,喜欢把梦里面的东西往器官上面做解析,现在看来,有一部分我是接受的,其次的心理学的一些实验,给我最大的感受就是双胞胎实验,决定人的...

    这个春节在家粗略看了弗洛伊德的三本书《精神分析引论》,《梦的解析》,《性学三论》 ,还有一本《改变心理学的40项研究》,总的来说有些观点真的不错,以前没有接触过,下面是一些笔记。  我希望记录下来,以后可以慢慢看。  总的来说,佛洛依德总是把一些心理病归结于性,喜欢把梦里面的东西往器官上面做解析,现在看来,有一部分我是接受的,其次的心理学的一些实验,给我最大的感受就是双胞胎实验,决定人的发展最后很大是靠基因,尽管我们并不喜欢听这个,总有点宿命论在里面,可事实的确如此。 so,what's your choice?


    《精神分析引论》
    过失心理学
     
       精神分析有两个信条最足以触怒全人类:其一是它和他们的理性的成见 相反;其二则是和他们的道德的或美育的成见相冲突。这些成见是不可轻视 的,它们都是人类进化所应有的副产物,是极有势力的,它们有情绪的力量 作基础,所以要打破它们,确是难事。
     
      心理过程主要是潜意识的,至于意识的心理过程则仅仅是整个心灵的分离的部分和动作。我们要记得我们从
    前常以为心理的就是意识的。意识好象正是心理生活的特征,而心理学则被认为是研究意识内容的科学。
     
      我们相信人类在生存竞争的压力之下,曾经竭力放弃原始冲动的满足,将文化创造起来,而文化之所以不断地改造,也由于历代加入社会生活的各个人,继续地为公共利益而牺牲其本能的享乐。而其所利用的本能冲动,尤以性的本能为最重要。因此,性的精力被升华,就是说,它舍却性的目标,而转向他种较高尚的社会的目标。但是
    由此而造成的组织是不大稳固的,因为性的冲动不易控制;而参与文化事业的各个人都不免有受性力反抗的危险。性力如果一旦放肆,回复到它原始的目标,社会文化就将遭受到最大的危机。所以社会不愿有人指出性和社会发
    展的关系;更不愿承认性本能的势力,或讨论各人性生活的重要;为了训练克制,关于性的问题,就完全避而不谈了。因此,精神分析的理论是要受到非难的,是要被视为丑恶的,不道德的,或是危险的。但是这种驳斥并不容
    易生效,因为精神分析的结论实可称为科学研究的客观结果;所以要驳斥得有力,就不得不有相当的理由。人类的本性喜欢把不合意的事实看作虚妄,然后毫无困难地找些理由来反对它。因此,社会宣布它所不能接受的东西为
    不真实的,用来源于感情冲动的一些逻辑的。具体的理由来低毁精神分析的结果,并坚持偏见,借以抵抗我们强有力的反驳。  然而我们决不因此对这种反面的理论趋势表示退让。我们只是要承认我们苦心研究所得到的事实。我们认定在科学研究的范围之内,不必照顾到各人实际上的成见,不论它们是否有理。
     
    what? 
    一般健康人也常 有,与疾病完全无关。大家所常犯的过失。譬如,
    你想要说 一件事,却用错了词
    人又如听官本没有病,可是听错3人家所说的话。
    譬如一个人记不起他所熟悉 的见面便认识的人的名字;
    又如一个人忘记去做一件他所要做的事,到后来 可又记起来了,可见他只是暂时地遗忘。
    此外另有一种过失并没有这种暂时 性,例如放错5了物件以致后来找不到了。
     
    why?
    假使你们能够解释一个耳聪目 明的人在白天如何能看见或听到根本不存在的事物,或解释一个人如何能忽 然相信自己正在受到他最亲爱的人的迫害,或者如何能用最巧妙的理由证明 一种连任何儿童都会感到荒谬的幻想,那末,人们就会愿意重视精神分析了。 但是如果分析仅只能说明一个演说家为什么用错了字,或一个主妇为什么遗 失了钥匙等琐屑小事的原因,那么我们的时间和精力就应留以研究更为重大 的事情了。
    从小事到大事,微乎其微的符号也有它相当的价值,是不容我们轻视的,小事是毛细血管,大事就是主动脉。 
     
    循环系统的疾病和央调是常态机 能所以错乱的生理根据;兴奋。疲倦、及烦恼等,则可视为心理生理的原因, 这些都容易化为理论。疲劳、烦恼和全面的兴奋可以引起注意的分散,以致 不能专心从事于动作,使事情很易受到干扰而不能准确完成。神经中枢的血 液循环如有毛病或变化也可有相同的结果,照样引起注意的分散。总之,由 于机体的或心理的原因而引起的注意的扰乱就是各种过失的主因。
     
    舌误本身都有意义,舌误的结果本身可被看作是一种有目的的心理过程,是一种有内容和有意义的表示。
    假定大多数的舌误和一般的过失都有意义。
     
    有一个青年告诉我这个故事:“几年前我和我的妻子颇多误会。我以为她太冷淡了,我虽然愿意承认她的美德,但是我们同居却缺乏感情。有一天她散步回来,买了一本书送给我,以为这本书也许可以使我高兴。我感谢她
    的关心,答应读它,把它放在杂物中,就再也找不到了。几个月过去了,有时偶然想起这乍书,却遍寻不得。大约六个月后,我的母亲病了。她的住处和我家相隔颇远。我妻子到母亲那边去看护她。母亲病重,却使我妻子的美德有表现的机会。有一夜,我回到家里,怀着满腔感谢我妻子的热情。我走到书桌面前,将一抽屉打开,虽没有什么明确的用意,但颇有几分模糊的信心。我所失去虽屡寻而不可得的书现在竟出现在我的面前了”
     
    梦会压缩几个人的特点到一个人的身上,各个特点混合在一起
    梦会移置,暗喻,重心推移,正就是反,反就是正,正反混合,二元论似乎有进了一步呢,由中点为一派,极端为另一派。
     
    根据我时长暗地里的想象,例如遇到恐怖分子救人,这种也可以作为潜意识作为分析,得不到人的重视,强烈的想要得到关注,没有安全感,没有归属感。   
     
    神经病通论
    神经病通论
     
    总的来说  太难    读起来非常难以理解  遂放弃了  

    《梦的解析》
    梦是可以解释的
    密码法,视梦为一种密码,其中每一个符号,都可以按密码册一个个予以解释。
     
    作者首先解析自己的梦
     
    “有一个大厅里宾客云集,伊玛就在人丛中,我走近她,劈头第一句话 就是责问她为什么迄今仍未接受我的“办法”。我说:“如果你仍感痛苦的话, 那可不能再怪我,那是你自己的错!”她回答道:“你可知道我最近喉咙、肚 子、胃都痛得要命!”这时我才发现她变得那般苍白、浮肿,我不禁开始为自己以前可能疏忽了某些问题而担心。于是把她带到窗口,借着灯光检查她 的喉咙。正如一般常有假牙的淑女们一样,她也免不了有点不情愿地张开嘴 巴,其实我以为她是不需要这种检查的⋯⋯。结果在右边喉头有一块大白斑, 而其他地方也多有广泛的灰小白斑排成卷花般的小带,看来很像鼻子内的“鼻 甲骨”一般。于是我很快地叫 M 医师来再做一次检查,证明与我所见一样。⋯⋯ M 医师今天看来不同于往常,苍白、微跛,而且脸上胡子刮得一干二净⋯⋯。 现在我的朋友奥图也站在伊玛旁边,另一个医生里奥波德在听诊她的胸部(衣 服并未解开),并说道:“在左下方胸部有浊音。”又发现在她左肩皮肤有渗 透性病灶(虽隔着衣服),我仍可摸出这伤口。M 医师说:“这毫无疑问地是 由细菌感染所致,那没什么问题,只要拉拉肚子,就可以把毒排出来。”⋯⋯ 而我们都十分清楚这是怎么搞出来,大概不久以前,奥图由于伊玛当时身体 不舒服而给她打了一针 Propyl... ... Propyls... ... Propionicacid... ... Trimethylamin(那构造式我可 清楚地看到呈现在我眼前)⋯⋯其实,人们是很少这般轻率地使用这种药的, 而且很可能当时针筒也是不够干净的⋯⋯。”
     
    解析
     
    一、“在大厅里——有很多宾客,正受着我们的招待”:那年的夏天, 我们正住在 Bellevue— 是 Kahlenbery〔11〕附近山中的独屋,这座房子本 是建来作避暑的别墅,所以都是些高大宽敞的房间。这梦是在我妻生日前一 天所做,记得做梦的前一天,我妻曾与我谈及生日当天宴会的安排,并开出 一列邀请的名单——而伊玛是当中之一。因此,在梦中,我就有宛如当天生 日宴会的一幕出现。
    二、我责怪伊玛为何未接受我的办法,我说:“如果你仍感痛苦,那可 不能再怪我,那完全是你自己的错!”:在醒时我都有可能说出这种话,而且 可能事实上我也已经说过也不一定。当时我以为(日后我已证明那是错误的) 我的工作只是对患者揭示他们症状下面所隐藏的真正毛病所在而已,至于他 们接受成功所系的解决的办法与否,则我无能为力。所以在梦中,我告诉伊 玛那些话,无非是要表示她今日之久病不愈,实非本人“治疗”之不力⋯⋯ 而很可能地这个梦主要目的,就在这一小段。
    三、伊玛抱怨说:“喉痛、胃痛、腹痛可把我闷死了。”胃痛是她最初 找我时就已有的症状,但当时并不太严重,最多不过胃里不舒服想吐而已; 至于腹痛、喉痛可就从没听说过,为何在梦中,我会替她造出这些症状,迄 今我仍不明白。四、“她看来苍白、浮肿”:实际上伊玛一直是脸色红润,所 以我怀疑大概在梦中她被另一人所“取代”了。
     
    五、“我开始为自己可能以前疏忽了某些问题而担心”:读者们都知道, 一个精神医生常常有一种警惕,就是他往往会把其他医生们诊断为器官性毛病的症状,统统当作“歇斯底里症”来医治。可能就是这种警惕心使我产生了这一段。而且,另一种可能,就是果真伊玛的症状是由器官性毛病引起的话,那就当然不是我用心理治疗所能治好的,而我就大可不必以此当作失败 而耿耿于怀。因此也许可能潜意识里,我反倒希望以前“歇斯底里症”的诊断是个错误。
    六、“我带她到窗口以便看清她的喉咙,最初她稍稍‘抗拒’,有如带 着假牙的女人怕开口,我以为其实她是不需要这种检查的”:实际上我从未检查过伊玛的口腔。这梦中的情景,使我想到以前有个富婆来找我看病,她外表显得那般漂亮年轻,但一要她张开嘴巴,她就尽量要掩饰她的假牙⋯⋯ “其实她需要这种检查”,这句话似乎是对伊玛的恭维,但对这句话我另一种解释⋯⋯。由于伊玛站在窗口的一幕,使我回想到另一经验:伊玛有一位很好的朋友,有一天我去拜访她时,她正好就像梦中伊玛一般站在窗口让她 的医生——M医师(就是梦中的那位)为她检查。结果在喉头发现有白喉的伪膜⋯⋯。M医师、白喉般的膜、窗口都一一在梦中呈现。现在我才发现到, 这几个月来,我就一直怀疑着她也有“歇斯底里症”,而其实我之有此种的 想法,只不过是因为她常有“歇斯底里症”(就像梦中的伊玛一样)。因此梦 中我就把她俩作了置换。如今我才记起我一直期待着伊玛的这位朋友,迟早会找上我来医她的病。但事实上,我又自知决不可能;因为她一直是那种保守的女人,可能梦中特别提出的“拒绝”就意味着这一点。另一个对“她不需要⋯⋯”的解释,可能就是指着这位朋友,因为她迄今一直能不需要外来的帮忙而好好地活着。最后剩下苍白、浮肿、假牙无法在伊玛和她这位朋友身上发现到。假牙可能来自那富婆;而另外我又想到另一人物——X夫人, 她不是我的病人,而且我也真不敢领教这家伙,因为她一向就与我过不去,一点也不柔顺。她脸色苍白,而且有一次身体不好,全身浮肿⋯⋯。就这样 子,我同时用了几个女人来取代了伊玛,而她们与伊玛的共同点只是她们都同样地拒绝了我的医疗。我之所以在梦中用她们取代伊玛,可能是我比较关心她这位朋友,或是我嫌伊玛太笨,以致未能接受我的办法,而其他的女人可能较聪明、较能接受〔12〕。
    七、“我在她喉头发现一大块白斑,并有小白斑排成像皱缩的‘鼻甲骨’ 一般”:白斑使我联想到伊玛的那位朋友的白喉;但同时又使我回想起两年 前我的大女儿所遭遇的不幸,以及那一段时期的诸般不如意。那皱缩的“鼻 甲骨”使我想起自己的健康问题,当时我常服用“古柯碱”来治疗鼻部的肿 痛,而几天前,我听说一个病人因用了“古柯碱”,而使鼻粘膜引起了大块 的“坏死”。记得一八八五年我正极力推荐“古柯碱”的医疗价值时〔13〕, 曾遭来一连串的反对,而且有个至友因大量滥用“古柯碱”,而加速了他的死亡。
    八、“我很快地叫M医师来再作一次检查”:这只是反映出M医师同我 们这几人的关系,但很快地却意味着是一个特别的检查,这使我想起一个很 糟的行医经验:当 Sulphonal 仍广泛地被使用,而看不出什么特别的副作用 时,有一次病人就因我开了这种药给她,而产生严重的副作用,使我不得不 马上求助于前辈们。啊!我现在才发现到,这位女病人的名字与我死去的大 女儿完全一样,看来这真是命运的报应,同是一个玛迪拉,我害了她,结果就害了自己的骨肉,以眼还眼,以牙还牙。由此看来,潜意识里,我似乎常以自己的缺乏行医道德而自责。
    九、“M医师脸色苍白、微跛、并且胡子刮得一干二净”:M医师实际上 就是个脸色常常苍白而令人担心的家伙;但刮胡子、跛行却又使我想到这又 是另外一个人——我那位在国外的兄长,他经常是胡子刮得最干净的人,而日前来信说,最近因大腿骨的关节炎而行动不便。但为什么这两人会在梦中合成一人呢?想来想去,唯有一个共同点——都对我所提出的意见提出异 议,而使我与他们的关系极端恶化。
    十、“奥图站在伊玛旁边,而里奥波德为她作叩诊,且注意到她的左下 胸部都有阴浊音”:里奥波德也是一内科医生,是奥图的亲戚,由于两人干 的是同一行当,所以一直都互不相让,当我仍在儿童精神科主持神经科门诊 时,他俩都在我手下帮过忙,而两人迥然不同性格曾给我颇深的印象。奥图 是敏捷、快速,而里奥波德却是沉稳、仔细而彻底。在这梦里,我无疑地在 赞赏里奥波德的细心。这种比较就有如上述的伊玛她那位朋友一般,只是反 映出我个人情感上的好恶。现在我才看出在梦中我思路的运行:由我对她有 所歉疚的玛迪拉→我的大女儿→儿科医学→里奥波德与奥图的对照。关于梦 中的“浊音”使我联想到有一回在门诊,当我与奥图看过一个病人后,正讨 论不出名堂时,里奥波德再作了一次检查,发现到这个可作重要线索的“浊 音”。我还另有一种想法:要是伊玛就是那病人多好,因为那病人后来已确 证为“结核病”,不会像伊玛的这般难断的疑病。
    十一、“在左肩皮肤上有渗透性的病灶”:我一下子就想到这正是我的 风湿痛的部位,每当我夜半醒来,这毛病就要发作。再下一段“虽说隔着衣 服,我仍可摸出这伤口”可能就指着我自己摸到自己的身体,又“渗透性病 灶”这句话很少用来指皮肤上的毛病,多半都是用来指肺部,如左上后部有 一“渗透性病灶”⋯⋯等的说法,所以又一次我们可以看出,我内心是多么 希望伊玛患的是那种极易诊断的“结核病”。
    十二、“虽说穿着衣服”:这只是一个插句,在儿童诊所里我们一向是 要他们脱光衣服作检查的,但一般女性多半是办不到的。记得有一个名医就 是专门不叫病人脱衣,而能“看穿”她们的病,所以最受女病人的欢迎⋯⋯ 这个插句,我实在看不出什么名堂。
    十三、“M 医师说:‘这是病菌感染,但没关系,只要拉拉肚子,把毒素 排出就可以了!’”:这乍看是多么荒谬可笑,但要仔细追究,倒也大有文章。 梦中我看出这病人有白喉,而白喉多半是有局部感染,再引起全身毛病,里 奥波德曾查出伊玛胸部有一“浊音”,是否为——“转移性病灶”。但就我所 知,白喉是不全在肺发生“浊音”的,难道会是“脓血症”吗?“这没什么 问题⋯⋯”完全是一种安慰之词,梦中 m 医师说这是病菌感染——一种器官 上的毛病,所以我想可能又是我要减轻我的责任——毕竟是因为她患的是器 官性毛病,怪不得我这百试不爽的心理治疗会失败。要是她真的是“歇斯底 里症”,那才不会⋯⋯。而很可能当我的梦发展这儿时,我的意识已开始自 责:“只为了自己能辩解到不必为她负责任,就不择手段,让伊玛变成感染 上‘结核病’重症,是多么残酷不仁!”于是以后的梦又转向另一方向,尽 往乐观的方向发展,才有这般“这没什么问题”的说法,但为什么这种安慰 之词,却用这般荒谬不智的说法呢?老一代老一代的庸医,还有人相信白喉 的毒素,可要由肠管自己排出,所以可能在这梦中,我就有意识笑 M 医师为这种糊涂大夫。但我又想起一件回忆:几个月前,有一个病人因消化不良找 上门来,当时我一眼就看出这是“歇斯底里症”。但别的医生都诊断为“贫 血、营养不良”。由于我不愿意在他身上试用“心理疗法”,所以我就劝他到 海外游历以松弛一下他那长久郁积的不安。不料几天前,他由埃及寄了一封 信给我,说他在那儿又发作一次,结果当地的医生诊断为“痢疾”。我实在 是很怀疑,这明明是“歇斯底里症”,怎么会是“痢疾”,大概是当地医生的 误诊吧!但我又忍不住开始自责:“为什么使一个有病的人,放任他到那种 可能感染上“痢疾”的地方去玩?还有白喉与痢疾两个字念起来是不是也十 分相近呢〔14〕?而这种情形的取代,在梦中是不乏例子的。
    在梦中我使这些话由 M 医师口中说出,可能有意在开他玩笑,因为他 曾告诉我一件相类似的事:有一个同事请他去会诊一个快断气的女病人。M 医师由于发现到,她尿中出现大量的蛋白质,而表示不太乐观,但那同事却 不当一回事地说:“这没什么问题⋯⋯”因此我可能在梦中,就有意识笑这 位看不出“歇斯底里症”的医生。我经常在想:“M 医师可曾想过伊玛的那 位朋友,不是‘结核病’而是‘歇斯底里症’?会不会是他看不出而误诊成 ‘结核病’呢?”但我在梦中这般刻薄地讥讽他,究竟又有什么动机呢?想 来只有一个目的——报复。因为 M 医师与伊玛都反对我,因此在梦中,我以 伊玛说她是活该,而把一种最荒谬、最可笑的话由 M 医师口中道出。
    十四、我很清楚地确知那感染是怎么来的”:这句话似乎很不合理,因 为在里奥波德发现“浊音”“渗透”以前,我根本没想到这会是细菌感染。
    十五、“不久以前,当她不舒服时,奥图曾给她打了一针”:奥图到乡 间拜访伊玛时,是因为乡间旅舍有急症,请他去打针而顺道找伊玛的:所以 “打针”可能是由此而联想的。
    又“打针”使我想到,我有一位至友因为注射大量“古柯碱”而中毒 死亡,而当时我是主张,在戒掉吗啡中毒时,可以使用“古柯碱”。想不到, 他竟一下子就打了那么大量而送命,这件事曾使我久久不得释怀。
    十六、“打的药是 Propyl... ... Propyls... ... Propionicacid... ... ”:这劳 什子药,到底是什么,我自己也从没见过。在做梦的前一天,奥图送我一瓶 标着 Ananas(伊玛的姓很近这个音)的酒,由于强烈的机油味道使我作呕, 所以我想把它丢掉。我妻说不如送给佣人们喝,结果我就大骂她:“佣人也 是人,我可不准你用这毒死他们!”也许“Amyl”与“Propyl”音很近吧!
    十七、“Trimethylamin”:在梦中,我还可以清晰地看到构造式用粗体 字标出来,但 Trimethylamin 对我又有什么特别意义呢?记得以前我曾与一 位无所不谈老友聚会时〔15〕,他告诉我,他最近对于“性”的化学研究的 结果,并提到他发现 Trimethy-lamin 为一种性激素代谢的中间产物,因此, Trimethylamin 在我梦中可能代替了“性”,而在我眼中,“性”正是一个精 神病学上的大问题。我的病人伊玛是一个寡妇,如果我硬要自圆其说的话, 她的毛病可能就是由“性”的不能满足而产生。当然这种说法必不会被那些 追求她的人们所接受,但这样的分析,似乎也颇能与梦里情节相吻合。
    我还是想不出 Trimethylamin 为什么那么清楚地出现在我梦中;它一 定是个比喻,而且很可能不是“性”的代称而已,但我想不出有任何更好的 解释。又提到性问题,使我记起了影响我很大的一位医学前辈,他一生专攻 鼻炎或鼻窦炎,并曾发表一篇“鼻甲骨与女性生殖器官的关系”的论文,而 在梦中我曾提到鼻甲骨,所以这更使我确定了:在潜意识里我认为伊玛的病与性是有一点关系的〔16〕。 十八、“通常这种针,我们是不轻率就打的”:这完全是在指责奥图的
    不对。记得当天奥图告诉我伊玛的事时,我心里头就这么骂他:“你怎么这 般不明是非轻率地听信伊玛家人一面之词”,但这“轻率”的打针又使我联 想到,我那用过量“古柯碱”而死的朋友,以及可怜的玛迪拉⋯⋯。很明显 地,一方面我是借着这梦在推卸我的责任,而对不利于我的人一一报复,而 另一方面我却始终摆脱不开良心的自谴。十九、“很可能连针筒也不干净”: 这又是指责奥图的,但这来源可又不同,我有一位老病人已经八十二岁,两 年来一直靠我每天给她两针吗啡来维持〔17〕。但最近迁到乡间以后,找了 别的大夫替她打针,结果发生静脉炎。这消息使我感到非常得意,因为这表 示我行医的良心与谨慎,使我两年来从没出过问题。“这一定是针筒不干 净”,同时又使我想起,我妻在怀孕快生玛迪拉时,曾因打针而发生“血栓 症”。由以上看来,我曾在梦中,把伊玛和我已死的爱女玛迪拉又合成了一 人。
    以上我完成了这个梦的分析〔18〕。在分析的过程中,我曾尽了最大努 力去避免接受那种由“梦内容”及其背后所隐藏的“梦的想法”的比较所暗 示出的各种意念,而把真正梦的意义呈现出来。由整个梦,我发掘出一贯彻 前后的意向,那也就是我所以做了这个梦的动机。这梦达成了我几个愿望, 而这些都是由前一个晚上奥图告诉我的话,以及我想记录下整个临床病历所 引起。整个梦的结果,就在于表示伊玛之所以今日仍活受罪,并不是我的错, 而应该归咎于奥图的。由于奥图告诉我,伊玛并未疹愈,而恼了我,我就用 这梦来嫁祸于他。这梦得以利用其它一些原因(事实上,这些原因也搪塞了 不少解释)来使我自己解除了对伊玛的歉疚。这梦呈现了一些我心里所希望 存在的状况。所以我可以这么说“梦的内容是在于愿望的达成,其动机在于 某种愿望”。
    这个梦乍看似乎大体情景并无甚特别,但就愿望达成的观点来仔细推 敲,则每一细节均有意义的。我之所以在梦中这般报复奥图,并不只是由于 他那么轻率地就为伊玛的未痊愈而怪我,可能还因为他曾送那机油臭味的 酒,所以我在梦中,把这两回事浓缩在一起,成了“Propyl 的注射”。然而 我仍心有不甘,于是我再拿他与较优秀的同事做比较,以继续我的报复工作。 甚至我很想当他面说:“我喜欢他,远甚于你。”但是,奥图并不是我的愤怒 所指向的唯一对象。同时我也对我那不听话的病人,深感不满,把她用另一 个更聪明、更柔顺的人物来取代。还有,我也不放过 M 医师,因此,我用一 种很荒唐的胡扯,来表达出我对他的看法——他的态度几乎是一个大蠢才(说 了些“会发生痢疾⋯⋯等等的鬼话”)事实上,看来似乎我很想用他转换为 一个更好相处的朋友(那告诉我 Trimethylamin 的朋友),就像我将伊玛转 换成她朋友,奥图转换成里奥波德。整个梦看来,我有如想说出:“使我脱 离这三个可厌家伙吧!让我自己选三个人来取代吧!如此我才可逃避那我应 得的这些谴责!”在梦中,这些不合情理的谴责,均经过复杂的变化后才呈 现出来。伊玛的病痛,只是由于她的拒绝接受我的医疗,过不在我。而且如 果那些病痛,系由器官性毛病引起,那么当然不能用我的心理治疗见效。伊 玛的受苦,完全是由于她的守寡而引起的,而这我也爱莫能助,伊玛的病, 是由奥图轻率的打针引起的——一种我所未曾用过的不适当的针药。伊玛的 抱怨完全是由不洁的针筒所引起,就像我从未引起那老妇人的静脉炎一般。
     
    梦是愿望的达成
     
    大部分的梦可以解析为愿望的达成   作者在这里举了很多儿童的例子,因为儿童的愿望简单,梦也很简单。
     
    梦的改造
     
    还有另一位我的女病人,一位非常聪明伶俐的妇人,也做了一个与我 的理论完全冲突的梦。但这也按着我那“一个愿望的未能达成,其实象征着 另一愿望的达成”的原则,很简单地解决了她的不服。事情是这样的,有一 天,我告诉这病人,梦是愿望的达成。而隔天,她就告诉我,她梦见她与她 婆婆一道去避暑。而我早就知道,她非常不喜欢与她婆婆住在一起打发这夏 天。而且,我也听说,她很高兴地已经在离她婆婆要去避暑的地方相当远处 租到了房子。因此这个梦,看来又与我的理论正适得其反。难道这可以证明 我的理论是错误的吗?由这梦的推论所得的解释看来,我是完全错了。但, 其实她最大的愿望,就是希冀我的一切都是错的,而这梦也就正满足了她这 种希望。她之所以希冀我有错误,事实上是一件严重的问题。因为,在她接 受我心理分析治疗期间,由她所供给的资料中,我曾分析出她生命的某段时 间内,曾有某些事情的发生,与她目前的病情大有关系。而这一点,她却因 完全记不起来而否认。但不久以后,经过一番追问,我们终于找出了我的断 言确实是对的,也因此她心理就不自觉地希望有一天能证明我的话是错的。 于是她就将此愿望,转变成梦中与她婆婆一道下乡避暑的根本不可能发生的 荒诞怪事。
     
    还有一个女病人告诉过 我一个更悲惨的梦,来反驳我的理论。这病人是个年轻少女,以下便是她的 独白:“你总记得我姐姐现在只有一个男儿查理吧,她那长男奥图在我尚与 他们同住在一起时,即告夭折。我当时最疼爱奥图,而且他也几乎都是由我 带大的。当然,我也很喜欢查理,但他总不及奥图那么惹人爱。昨晚,我竟 做了一个怪梦:我梦见查理僵硬地躺在小棺木内,两手交叉平放着,周围插满了蜡烛。总之,那样子就像当年奥图死时的情景。 现在,请你告诉我,究竟这梦是什么意思呢?你了解我的,难道我真的那般狠心地希冀我姐姐连那最后的一个宝贝儿子都死去吗?或者说这梦只是表示出我宁可查理代替我那宝贝的奥图去死呢?”我保证她,她所做的第二个解释是一定不成立的。经过一番思考以后,我终于能够给她一个满意的解释。当然,主要还是因为我对她过去的一切都有很深的了解。
      这女病人是幼失怙恃的孤儿,从小即由较年长甚多的大姐养大。在那 常来她家拜访的亲友中,她邂逅了一位使她一见倾心的人物。有一段时间他 们几乎已到了谈论婚嫁的阶段。然而,这段美满良缘却因她大姐无理的反对, 而告吹。经过这段破裂,那男的就尽量避免到她家来,而她自己在奥图(这 她曾把那破碎的爱情转移到他身上的小孩子)不幸夭折后,她也伤心地离家 远行,另谋独立。然而,她却始终无法忘怀这使她一度倾心的男友。但她的 自尊心,使她不愿主动去找他,而她又无法将这份爱情转移给其他对她求婚 的人。她这爱人是一个文学教授,不管他在哪儿有个学术演讲,她必是永远 在场的听众,而且她从不放过任何一个可以偷偷望他一眼的机会。我记得在 做这梦的前一天,她曾告诉我,这教授明天将有一个发表会,而她也一定要 赶去给他捧场。也就在这发表会的前一个晚上,她做了以上那个梦,而她告 诉我梦见的日子也就是发表会的这一天。因此我能很清楚地看出了这梦的真 谛。于是,我追问她究竟在奥图死后,有什么特别事件发生呢?她马上回答 道:“当然,我记得最清楚了,教授在阔别这么久后,也突然赶回吊丧,而 使我在奥图的小棺木旁,再度与他重逢。”而这就正是我早就心里有数的。 于是我有了如下的解释:“如果现在另一个男孩子又死了,那种同样的情形, 将必会再重演。你将回去与你姐姐厮守终日,而教授也一定会来吊丧,如此 你就能够再一样地与他重逢。这梦只不过是表示了强烈的想再见他一面的愿 望——一个你一直在内心挣扎,不得安宁的愿望,我知道你已买了今天发表 会的门票,你的梦是一种焦躁的梦,对那差几小时就可达到的愿望都等不及 的表现。”为了把她的愿望,予以更周全的伪装,她在梦中还故意选用了最 悲哀的气氛——丧事,以掩饰那与此完全相反的爱情之狂热。然而,事实上, 在她最疼爱的奥图死亡的时刻,她仍无法抑制自己对这久别的情郎所具有的 寸断柔情。
     
    梦的材料与来源
     
    一、梦总是以最近几天印象较深的事为内容
    二、梦选择材料的原则完全迥异于醒觉状态的原则,而专门找一些不 重要的次要的被轻视的小事
    三、梦完全受儿时最初印象所左右,而往往把那段日子的细节,那些 在醒觉时绝对记不起来的小事重翻旧帐地搬出来
     
    一个看来单纯而坦率的梦,只要你肯花时间精力去分析它,结果一 定是一点也不单纯的。如果用句较露骨的话来说:梦均表示出“兽性的一面”。
     
    一位聪慧高雅的少妇,在其生活中表现得十分保守,就如一般所说那种 “秀外慧中型”的标准主妇,曾做了如下一个梦:“我梦见我到达市场时太 晚了,肉卖光了,菜也买不到”,当然,这是一个很单纯无邪的梦吧! 但, 我相信这并不就是梦的真正意义,于是我要她详述梦中的细节:她与她的厨 师一道上市场,而由厨师拿着菜篮子,当她向肉贩说出要买的某种东西时, 他回答说:“现在那种东西再也买不到了。”而拿另一种东西向她推销说,“这 也很不错的!”但她拒绝了,于是再走到一女菜贩那儿,那女人劝她买一种 特别的蔬菜,黑色的成束地绑着的,但这少妇回答说,“我不知道那是什么 东西,我还是不要买好!”这梦与当天的昼间经验之关系是够清楚的。她当 天的确是太迟才到市场,以致买不到任何东西。“肉铺子早已关门”,这经验 深入其印象中,而构成梦中的这番叙述。但且慢!在这叙述中,丝毫不曾提 到这肉贩的衣着是否有点不近常理呢!做梦者一直就未形容过他的服装色 样,也许这是她故意避免的吧!且让我们好好地推敲这梦到底涵蕴着什么意义!
    那肉贩子的话“现在那种东西‘再也买不到了’” 到底从哪个地方来呢?那是我曾说过的话呀!在几天前,我曾劝她说:“那 些儿时太早的记忆,你可能‘再也想不起来的’。但,事实上它会在解析中 找出已‘转移’至梦里头的。”因此,梦中的肉贩子其实是象征着我,而她 之拒绝购买另一种代用品,也不过是她内心无法接受“以前的想法感觉会转 移至目前的情形”的说法。“我不知道那是什么东西,我还是不买得好!”这 句话又是从何而来呢?为了解析的方便,我们将这句话拆成两半:“我不知 道那是什么东西”,这句话是她当天与她那厨师为某件事发生争执时所说的 气话,并且她当时还接着说了一句“你做事可要做得像样点!”在这儿,我 们可以看出又一个“置换作用”的发生,在那两句对厨师所说的话中,她将 真正有意义的一句话压抑下来,而用另一句较无意义的话来代替。而这句抑 压下去的句子“你做事可要做得像样点”却才真正合得上梦中所剩的一些内 容。对某些人不合理的要求,我们往往会有一句俗话:他忘了关他的肉铺子。 至此我们差不多已经看出这解析后的端倪来,然后我们再用那卖菜女人的对 话来印证一下。一种绑成一束一束而卖的蔬菜(后来她又补充说明是长形 的),又是黑色的,这种又像芦笋又像黑萝卜的梦中怪菜到底是什么东西呢? 我想我也不必再去详释这些代表着什么(想想,漫画中的“小黑,救救你自 己吧!”〔4〕)。但就我而言,这“肉铺子”早已关门的梦所解析出来的故事, 似乎与我们最初所猜测的与性有关的主题息息相关。由于在此我们并不拟探 讨这梦的整个意义,所以还是就此结束。
     
    “她将一根蜡烛置于烛台上,但蜡烛断了,而无法撑直。在学校的一个 女孩子骂她动作笨拙,但她回答说,这并不是她的错。”这个也一样是真的 发生过的事,前一天她曾真的把一根蜡烛置于烛台上,但却没有像梦中所说 那样断掉。这梦曾使用了一个明显的象征。蜡烛是一个能使女性性器兴奋的 物品,它断了,不能撑直,这在男人方面而言,就指着“性无能”了。(“这 并不是她的错”)但这位受过良好的教养,对那些猥亵的事完全陌生的高尚 少妇,会有可能知道蜡烛这方面的用法吗?但她终于说出来她曾如何偶然地 听到过这种事的。当她以前有一猥亵的歌:“瑞典的皇后,躲在那‘紧闭的 窗帘’内,拿着阿波罗的蜡烛⋯⋯”她当时并没听清楚最后那句话的意义, 因此她曾要她丈夫解释那是什么意思。于是这些内容便遁入梦中,而且用另 一种无邪的回忆所掩饰,当她以前在宿舍时,曾因“关窗帘”关不好而被人 笑她动作笨拙。而手淫的意义与性无能的关联又是经常为人所提及的。于是 梦的无邪内容一经解析,又再也不成其为无邪了吧!
     
     
    梦程序的心理
     
    学习心理学是为了了解我自己的情况  诊断和治疗     放弃全部的包袱   主动释放  不要压抑自己
     
    在解析梦的时候,我常常运用下述手段,而从来没有失败过。如果病 人向我提出的梦很难了解的时候,我要他再重复一遍。再重复一遍的时候,他很少会运用同样的文字。而他那运用不同文字来形容的梦的部分正好是梦伪装的脆弱点。
     
    梦是一种精神活动,和其他的一样重要;其动机常常是一个寻求 满足的愿望;它们之所以不被认为是愿望,以及具有许多特征与荒谬性,完 全是由于精神审查制度在梦形成过程中加以影响的结果;
     
    1、由于一些偶然的原因,无法在白天达到结论者。
    2、那些因为我们智慧的不足,而无法完全处理者。
    3、那些在白天被排挤与潜抑者。
    4、由于前意识在白天的作用使这处在潜意识中的愿望受到往往是强有力的激动者。
     
    太过专业  看起来就失去了兴趣   …      

    《性学三论》

    转载于:https://www.cnblogs.com/zeroones/p/8476810.html

    展开全文
  • 今天学习了这两种算法,都是用来求最小路径的算法,但是迪杰斯特拉算法只能从某个特定点到所有点的最短路径,而佛洛依德算法可以查出任意点到任意点的最小路径。 迪杰斯特拉: package dijkstra; import java....

    今天学习了这两种算法,都是用来求最小路径的算法,但是迪杰斯特拉算法只能从某个特定点到所有点的最短路径,而佛洛依德算法可以查出任意点到任意点的最小路径。

    迪杰斯特拉:

    package dijkstra;
    
    import java.util.Scanner;
    import java.util.Stack;
    
    /*
    * 算法思路:通过从特定起点查找,一直查找到所有点到这个点的最小路径。
    * 算法特点:因为要预防两点间的距离可能不是直接距离最短,所以处理要有些特别
    * 算法处理思路:首先通过一个大的循环嵌套循环count(点)-1次,这么做是为了查找除了自身的所有点到起点的权值。
    *              再通过一个for循环查找此时可达路径离起点到最近的点。把查出来点的设为已查找过。
    *              接下来再通过这个最短权值的点进行for循环操作,这个for循环作用是如果经过新增v
    *              顶点到达的定点比当前已知路径都短,我们更新
    *              这个路径权值,并设置到这个点的前驱节点是v,让我们查询时能查出路径
    *每个点都会走一次
    * */
    public class Dijkstra {
        public static void main(String[] args) {
            DijkstraArithmetic dijkstraArithmetic=new DijkstraArithmetic();
            dijkstraArithmetic.dijkstra();
            dijkstraArithmetic.find();
    
        }
    }
    
    class DijkstraArithmetic{
        //第一步:先准备一个图:
        final int max = 65535;
        int[][] graph = new int[][]{
                {0, 1, 5, max, max, max, max, max, max},
                {1, 0, 3, 7, 5, max, max, max, max},
                {5, 3, 0, max, 1, 7, max, max, max},
                {max, 7, max, 0, 2, max, 3, max, max},
                {max, 5, 1, 2, 0, 3, 6, 9, max},
                {max, max, 7, max, 3, 0, max, 5, max},
                {max, max, max, 3, 6, max, 0, 2, 7},
                {max, max, max, max, 9, 5, 2, 0, 4},
                {max, max, max, max, max, max, 7, 4, 0}};
        int[] D = new int[9]; //建立一个存储起点vo到各点的权值的数组
        int[] P = new int[9];//建立一个起点到这个点的最短路径的前驱结点
        int[] fin = new int[9];//建立一个确认每个点是否已经被算出最短路径,以便确认它不需要被再计算,被计算过就被记为1,为就按记为0
        public void dijkstra() {
            /**
             *      算法第一步:初始化工作
             */
            int i, j, k=0;
    
            //初始化这三个数组,
            for (i = 0; i < 9; i++) {
                D[i] = graph[0][i];//初始化权值
                P[i] = 0;//初始化前驱节点,试试自己的猜想(不行,如果这样的话,后面的!=0判断会出错误,而且能联通的都不为零)
                fin[i] = 0;
            }
            fin[0] = 1;//不用计算起点
            /*
             * 第二步,通过现可达点查找最小的权值
             * */
            for (i = 1; i < 9; i++) {//遍历所有点的个数(除了v0)
                int min = 65535;
                for (j = 1; j < 9; j++) {//寻找v0最近的顶点
    
                    if (fin[j] != 1 && D[j] < min) {//确认要加入的点没有被加入过,并且某点可达且找出最小值
                        min = D[j];//把目前查到的最小值赋给min
                        k = j;//记录最小值的下标
                    }
                }
                fin[k] = 1;
                for (j = 0; j < 9; j++) {//新更新了点,所以有了新的可达路径,更新这些新路径
                    if (fin[j] != 1 && D[j]>min +graph[k][j]){//更新那些和vo没链接但是和新的点有连接的点或者经过新的点有更近路径的点
                        D[j]=min+graph[k][j];//更新D[]数组的最小距离
                        P[j]=k;//设置修正权值的点的前驱结点
                    }
                }
            }
        }
        public  void find(){//输出最近距离节点
            int i;
            System.out.println("请输入你想要到达的结点");
            Scanner sc=new Scanner(System.in);
            int pointnum=sc.nextInt();
            i=pointnum;
    //        while(P[i]!=0){//循环输出每个点的前驱
    //           System.out.print(P[i]+"<-");
    //           i=P[i];
    //        }
    //        System.out.println("0");//输出最后一个是零点
            //输出时存的是某个节点的前驱结点
    
    
            //用栈输出
            StackMySelf stackMySelf=new StackMySelf(15);
    
            while(P[i]!=0){
                System.out.println(P[i]);
                stackMySelf.push(P[i]);//让每个元素入栈
                i=P[i];
            }
            stackMySelf.push(0);//把起点放进去
            while(!stackMySelf.empty()){
                System.out.print(stackMySelf.pop());
                if(!stackMySelf.empty()){
                 System.out.print("->");//最后一个点后面不会输出->
                }
            }
        }
    }
    
    class StackMySelf {//自定义一个栈
     private Object[] data =null;// 先自定义数组来当作栈的容器
     private int maxSize;//定义栈的最大存储空间
     private int top=-1;//定义栈的栈顶指针
        StackMySelf(){ //构造函数来确定栈的大小,默认是10
           this(10);
        }
        StackMySelf(int init) {//构造函数来确定栈的大小
            if (init >= 0) {//如果栈的容量大于等于1
                maxSize = init;//确定最大长度
                data = new Object[init];//实例化数组
                top = -1;//确认栈顶指针
            } else {
                throw new RuntimeException("初始化大小不能小于0" + init);
            }
        }
    
    
        public boolean empty(){//判空
            return top==-1?true:false;
        }
           public Object pop() {//出栈
               if (top == -1) { //先判断栈不为空
                   throw new RuntimeException("栈为空");
               } else {
                   return data[top--];
               }
           }
            public boolean push(Object e){//入栈
                   if (top == maxSize - 1) {
                       throw new RuntimeException("栈已满");
                   } else {
                        data[++top]=e;//赋值
                       return  true;
                   }
               }
               public Object peek(){//查看栈顶元素但不移除
                   if (top == maxSize - 1) {
                       throw new RuntimeException("栈已满");
                   } else {
                       return  data[top];
                   }
               }
    
            public int search(Object e){//返回对象在堆栈中的位置,以1为基数
              int i=top;//保留top的原本值
              while(top!=-1){//循环一直找到栈底
                  if(peek()!=e){
                      top--;
                  }else {
                      break;
                  }
              }
              int result=top+1;//以1开始,所以加个1
              top=i;//恢复top的值
              return result;
            }
    
     }/*
    * 算法思路:通过从特定起点查找,一直查找到所有点到这个点的最小路径。
    * 算法特点:因为要预防两点间的距离可能不是直接距离最短,所以处理要有些特别
    * 算法处理思路:首先通过一个大的循环嵌套循环count(点)-1次,这么做是为了查找除了自身的所有点到起点的权值。
    *              再通过一个for循环查找此时可达路径离起点最近的点。把查出来点的设为已查找过。
    *              接下来再通过这个最短权值的点进行for循环操作,这个for循环作用是如果经过新增v顶点到达的定点比当前已知路径都短,我们更新
    *              这个路径权值,并设置到这个点的前驱节点是v,让我们查询时能查出路径
    *每个点都会走一次
    * */
    public class Dijkstra {
        public static void main(String[] args) {
            DijkstraArithmetic dijkstraArithmetic=new DijkstraArithmetic();
            dijkstraArithmetic.dijkstra();
            dijkstraArithmetic.find();
    
        }
    }
    
    class DijkstraArithmetic{
        //第一步:先准备一个图:
        final int max = 65535;
        int[][] graph = new int[][]{
                {0, 1, 5, max, max, max, max, max, max},
                {1, 0, 3, 7, 5, max, max, max, max},
                {5, 3, 0, max, 1, 7, max, max, max},
                {max, 7, max, 0, 2, max, 3, max, max},
                {max, 5, 1, 2, 0, 3, 6, 9, max},
                {max, max, 7, max, 3, 0, max, 5, max},
                {max, max, max, 3, 6, max, 0, 2, 7},
                {max, max, max, max, 9, 5, 2, 0, 4},
                {max, max, max, max, max, max, 7, 4, 0}};
        int[] D = new int[9]; //建立一个存储起点vo到各点的权值的数组
        int[] P = new int[9];//建立一个起点到这个点的最短路径的前驱结点
        int[] fin = new int[9];//建立一个确认每个点是否已经被算出最短路径,以便确认它不需要被再计算,被计算过就被记为1,为就按记为0
        public void dijkstra() {
            /**
             *      算法第一步:初始化工作
             */
            int i, j, k=0;
    
            //初始化这三个数组,
            for (i = 0; i < 9; i++) {
                D[i] = graph[0][i];//初始化权值
                P[i] = 0;//初始化前驱节点,试试自己的猜想(不行,如果这样的话,后面的!=0判断会出错误,而且能联通的都不为零)
                fin[i] = 0;
            }
            fin[0] = 1;//不用计算起点
            /*
             * 第二步,通过现可达点查找最小的权值
             * */
            for (i = 1; i < 9; i++) {//遍历所有点的个数(除了v0)
                int min = 65535;
                for (j = 1; j < 9; j++) {//寻找v0最近的顶点
    
                    if (fin[j] != 1 && D[j] < min) {//确认要加入的点没有被加入过,并且某点可达且找出最小值
                        min = D[j];//把目前查到的最小值赋给min
                        k = j;//记录最小值的下标
                    }
                }
                fin[k] = 1;
                for (j = 0; j < 9; j++) {//新更新了点,所以有了新的可达路径,更新这些新路径
                    if (fin[j] != 1 && D[j]>min +graph[k][j]){//更新那些和vo没链接但是和新的点有连接的点或者经过新的点有更近路径的点
                        D[j]=min+graph[k][j];//更新D[]数组的最小距离
                        P[j]=k;//设置修正权值的点的前驱结点
                    }
                }
            }
        }
        public  void find(){//输出最近距离节点
            int i;
            System.out.println("请输入你想要到达的结点");
            Scanner sc=new Scanner(System.in);
            int pointnum=sc.nextInt();
            i=pointnum;
    //        while(P[i]!=0){//循环输出每个点的前驱
    //           System.out.print(P[i]+"<-");
    //           i=P[i];
    //        }
    //        System.out.println("0");//输出最后一个是零点
            //输出时存的是某个节点的前驱结点
    
    
            //用栈输出
            StackMySelf stackMySelf=new StackMySelf(15);
    
            while(P[i]!=0){
                System.out.println(P[i]);
                stackMySelf.push(P[i]);//让每个元素入栈
                i=P[i];
            }
            stackMySelf.push(0);//把起点放进去
            while(!stackMySelf.empty()){
                System.out.print(stackMySelf.pop());
                if(!stackMySelf.empty()){
                 System.out.print("->");//最后一个点后面不会输出->
                }
            }
        }
    }
    
    class StackMySelf {//自定义一个栈
     private Object[] data =null;// 先自定义数组来当作栈的容器
     private int maxSize;//定义栈的最大存储空间
     private int top=-1;//定义栈的栈顶指针
        StackMySelf(){ //构造函数来确定栈的大小,默认是10
           this(10);
        }
        StackMySelf(int init) {//构造函数来确定栈的大小
            if (init >= 0) {//如果栈的容量大于等于1
                maxSize = init;//确定最大长度
                data = new Object[init];//实例化数组
                top = -1;//确认栈顶指针
            } else {
                throw new RuntimeException("初始化大小不能小于0" + init);
            }
        }
    
    
        public boolean empty(){//判空
            return top==-1?true:false;
        }
           public Object pop() {//出栈
               if (top == -1) { //先判断栈不为空
                   throw new RuntimeException("栈为空");
               } else {
                   return data[top--];
               }
           }
            public boolean push(Object e){//入栈
                   if (top == maxSize - 1) {
                       throw new RuntimeException("栈已满");
                   } else {
                        data[++top]=e;//赋值
                       return  true;
                   }
               }
               public Object peek(){//查看栈顶元素但不移除
                   if (top == maxSize - 1) {
                       throw new RuntimeException("栈已满");
                   } else {
                       return  data[top];
                   }
               }
    
            public int search(Object e){//返回对象在堆栈中的位置,以1为基数
              int i=top;//保留top的原本值
              while(top!=-1){//循环一直找到栈底
                  if(peek()!=e){
                      top--;
                  }else {
                      break;
                  }
              }
              int result=top+1;//以1开始,所以加个1
              top=i;//恢复top的值
              return result;
            }
    
     }
    
    

     

    我在这里记下学习这个算法时一些遇到的问题:

    如:

    如果走到了B更新了B,然后修正到c的路径,可是a从d走才是最近的,这里想了很久,最后发现,他每次循环直走一个点,并设置一个点为走过路径,也就是说修正a到c的路径时,但是并没有把c加入走过路径,这时再通过D数组里的最小值会找到d,然后修正从d走a到c的路径。如果说a先到b直接到c这种情况只可能a到d的路径比a到b到c的路径大。

     

     

    佛洛依德算法:

     

    package Prim;
    
    import com.sun.corba.se.impl.orbutil.graph.Graph;
    import com.sun.org.apache.xerces.internal.util.SynchronizedSymbolTable;
    
    public class Prim {
        public static void main(String[] args){
            int[][] graph=new int[][]{{0,6,1,5,65535,65535},
                    {6,0,5,65535,3,65535},
                    {1,5,0,5,6,4},
                    {5,0,5,0,65535,2},
                    {65535,3,6,65535,0,6},
                    {65535,65535,4,2,6,0}};
            MinTree minTree=new MinTree();
            minTree.createMinTree(graph);
        }
    
    }
    
    
    
    class MinTree{
        public void createMinTree(int[][] graph) {
    
            int i, j,k=0 ,m;
            int[] lowcost = new int[6];//建立一个存储已被包入当前生成树的所有可达路径的权值
            int[] adjvex = new int[6];//用来记录可达路径权值的起始点,用于输出路径
            //接下来初始化第一个点
            lowcost[0] = 0;//我们要将所有访问过的节点包括设为0,以至于不会被访问到
            adjvex[0] = 0;//我们设置第一个顶点为0节点
            //将第一行的数据存入lowcost中
            for (i = 0; i < 6; i++) {
                lowcost[i] = graph[0][i];//初始化到所有点的权值,访问不到的是65535,以后会有新的点来更新这个数据
                adjvex[i] = 0;//先设置所有点都是从vo发出的
            }
    
            /**
             * 先选出当前可达点的权值最小的点,并加入生成树
             * **/
            for (i = 1; i < 6; i++) {//需要连接几个点就遍历几次
                int min = 65535;//定义在这里防止min拿到了最小值,之后min无法改变
                for (j = 1; j < 6; j++) {//遍历所有lowcost找到现在最小的权值
                    if (lowcost[j] != 0 && lowcost[j] < min) {
                        min = lowcost[j];//将最小权值点赋给lowcost,循环结束得到最小的
                        k=j;//将最小权值点的下标值存入k
                    }
                }
    
                System.out.println(adjvex[k]+"-"+k);//输出边
                lowcost[k]=0;//将这个点包入生成树
                /**
                 * 下面的步骤:
                 * 作用:因为加入了新的节点,所以更新到各个点的最小权值
                 **/
                for (m=1;m<6;m++){//将新加入生成树的点的连接点的权值全部更新至lowcost
                    if(graph[k][m]!=0&&graph[k][m]<lowcost[m]){//查看这个新加入点的权值是否有小于lowcost存在的权值并存入
                        lowcost[m]=graph[k][m];//赋值
                        adjvex[m]=k;
                    }
                }
            }
        }
    }
    
    
    

    佛洛依德算法思想就是通过三层循环,把每个点当作中继点,去连接他能连接通的所有点,直到最后一点时,
    保证所有点都能有相连接路径,这里有直接连接得也有通过中继点连接的,通过另一个二维数组存储它的路径节点,用于输出。

     

    展开全文
  • floyd 佛洛依德算法

    2020-07-16 21:16:11
    怎么硕呢,最起初的动态规划,用k一直在i和j之间反颠覆找更短的,如果更短就赋值。 这不是有手就行? //核心代码 for (k=0;k<n;k++) //计算Ak { for (i=0;i<n;i++) for (j=0;......

    怎么硕呢,最起初的动态规划,用k一直在i和j之间反颠覆找更短的,如果更短就赋值。

    这不是有手就行?

    //核心代码
    	for (k=0;k<n;k++)						//计算Ak
    	{
    	for (i=0;i<n;i++)
    		for (j=0;j<n;j++)
    			if (A[i][j]>(A[i][k]+A[k][j]))
    				{	A[i][j]=A[i][k]+A[k][j];
    					path[i][j]=k;
    				}
    	}
    
    

     

    展开全文
  • 路径平滑算法汇总

    千次阅读 2020-02-10 16:44:44
    全局路径规划(例如A*算法)算法计算路径完毕后,...路径平滑处理的相关算法有:佛洛依德算法 、贝塞尔曲线 佛洛依德算法 https://www.cnblogs.com/miaolegemi/archive/2017/12/05/7986335.html 贝塞尔曲线 https:/...
  • function [dist,mypath]=myfloyd(a,sb,db) %输入邻接矩阵a;元素a(i,j)——顶点i到j之间的直达距离,可以是有向的 %sb起点的标号;db终点的标号 %输出:dist——最短的距离 %mypath——最短的路径 ...
  • 学习最短路径算法-迪杰斯特拉和佛洛依德,最小生成树算法-Prim算法和Kruskal算法推荐网址
  • 佛洛依德冰山原理

    千次阅读 2017-08-16 14:37:55
    冰山理论:是萨提亚家庭治疗中的重要理论,实际上是一个隐喻,它指一个人的“自我”就像一座冰山一样,我们能看到的只是表面很少的一部分——行为,而更大一部分的内在世界却藏在更深层次,不为人所见,恰如冰山。...
  • 傻子也能看懂的弗洛伊德算法(转)

    万次阅读 多人点赞 2020-09-12 09:25:59
    文章出处:(啊哈,算法) 暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。...
  • 迪杰斯特拉算法与弗洛伊德算法

    千次阅读 2016-08-30 19:10:14
    // mydjstl.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; #pragma comment(linker, "/STACK:10000000 ")//扩大栈的大小,默认栈的大小为1M,这时maxnum=1000的话...
  • 图解弗洛伊德算法

    千次阅读 2017-07-23 13:31:58
    弗洛伊德算法与迪杰斯特拉算法的区别就是弗洛伊德算法可以求所有的点的最短路径 但是弗洛伊德算法的复杂度是O(n^3) 阿杰算法是O(n^2) 弗洛伊德算法的两个矩阵 第一个是邻接矩阵(是本图论的书就会有介绍) ...
  • 弗洛伊德算法-python

    2019-10-14 21:01:46
    1 解决的问题 从某一点到达任意一点的最短距离,任意两个节点之间的最短距离 来源... ...找一个中间点,经过中间点的距离与不经过中间点的距离是不是更小 ...加入经过2,d12 + d23 = 2 + 3 =5 &...
  • 佛洛依德算法

    2017-09-04 18:12:47
    佛洛依德算法
  • 其实阿德勒是20世纪跟佛洛伊德、荣格齐名的三大心理学家,阿德勒跟荣格两个人原本是跟着佛洛依德做心理学研究的,后期因为各自的见解不同,他们便先后跳出来,反对佛洛依德一部分的理论,最后就都跟佛洛依德决裂了。...
  • 弗洛伊德算法Python实现

    千次阅读 2018-10-05 20:22:34
    一、前言  很早之前就想把之前看过的算法问题总结出来,现在出的书籍基本上都是以C、Java为基础的算法书籍,以Python为基础的算法书籍很少。自己最近在学ML,开始使用Python,相比较与C与Java,Python的代码量更少...
  • // 采用邻接矩阵表示图 // 简单起见,邻接矩阵(图中各结点间的距离权值)在main函数中直接输入了 #include #include #define MAXVEX 9 #defin
  • 带权图的多种算法(有向图,无向图,Dijkstra算法,到每个顶点的最短距离,佛洛依德算法(Floyd),找出每对顶点的最短路径,带权重无向图最小生成树,prim算法,Kruskal算法求最小生成树)java实现, 有注释,简单...
  • 求最小生成树的相关链接 prim算法:链接 克鲁斯卡尔算法:链接 求单源最短路算法 迪杰斯特拉算法 弗洛伊德算法:链接
  • 塔罗牌为什么准?

    千次阅读 2005-01-23 18:23:00
    塔罗牌为什么准? 我们要知道塔罗牌为什么会准,就必须来探讨塔罗牌的运作原理。这是塔罗牌的根本观念上很重要的一环。...荣格可说是佛洛依德的学生当中最杰出的一位,他承袭了佛洛依德的潜意识理论
1 2 3 4 5 ... 20
收藏数 690
精华内容 276
关键字:

佛洛依德