数据结构——图的遍历

作者:小菜 更新时间:2025-02-27 点击数:
简介:接下来今天讲数据结构——图的遍历~上个学期在上海泰瑞达的春季招聘中曾被考过这类问题。

前面有一题是多态和另外一个名词的解释,有点记不清了。

然后还有一道题考的是括号

【菜科解读】

接下来今天讲数据结构——图的遍历~

上个学期在上海泰瑞达的春季招聘中曾被考过这类问题。

前面有一题是多态和另外一个名词的解释,有点记不清了。

然后还有一道题考的是括号解析,这个很简单的,用栈就能直接处理。

然后后面就是连续的两个图的问题。

之前好像只是简单的看了看源代码,对于什么是深度优先遍历和广度优先遍历稍微有点认识吧。

结果自然是可想而知,比较惨的。

当时我在卷子上是这么写的:“今天不会,明天就会了”。

当天回去就开始看图论,但是确实是搞的差不多了,不过现在嘛,呵呵~

首先,图的存储结构有简单的两种:1 邻接矩阵法 2临界表法

邻接矩阵我觉得是非常明了的一种图的表示方法,当然了,其缺点就是,在图的点数多而连接线少的时候,比较浪费资源。

我的邻接矩阵简单代码如下:

1 int main() 3 cout > nLineNumbers;23 // while(nLineNumbers --)24 // {25 // cout > nItem >> Point;27 // tmpGphLst.AddToListByOrder(nItem, Point);28 // }29 // tmpGphLst.BFS();30 // cout 这样从1点开始进行深度优先遍历,我们很容易就能得出其遍历结果:

1 2 3 5 4

这个结果相信不用我多说吧,具体可以看代码及其运行结果:

1 int Graph::DeepSearch(int Point) 2 { 3 p_nVisitList[Point] = 1; 4 cout 而邻接矩阵的广度优先遍历则是逐层访问,比较适合邻接表来做。

邻接矩阵的广度优先遍历方法如下:

1 void Graph::BFS() 3 p_nVisitList[4] = 1; 4 cout DL; 6 DL.push(4); 7 while(!DL.empty()) 9 int val = DL.front();10 DL.pop();11 for(int i = 0;i 看下这个类的代码:

1 class ListNode 3 public: 4 int val; 5 int weight; 6 ListNode * next; 7 public: 8 ListNode(); 9 };10 ListNode::ListNode():val(0), weight(0), next(NULL)14 class GraphList16 public:17 GraphList();18 ~GraphList();19 void AddToListByOrder(int nitem, int Point);20 void BFS(int n = 0);//这个广度优先遍历的代码太好写了21 private:22 int visit[5];23 ListNode * Next[5];24 };

上面的代码中包含了两个类,一个是邻接表的节点类,另外一个是邻接表本身。

代码还是很简单的,而且因为邻接表的特性,使得分层遍历十分方便,看主函数代码结构:

1 GraphList tmpGphLst; 2 int nLineNumbers = 0; 3 int nItem, Point; 4 cout > nLineNumbers; 6 while(nLineNumbers --) 8 cout > nItem >> Point;10 tmpGphLst.AddToListByOrder(nItem, Point);12 tmpGphLst.BFS();13 cout 2 #include 4 using namespace std; 6 class Graph 8 private: 9 //访问控制 10 int p_nVisitList[5]; 11 int (* pBlock)[5]; 13 public: 14 Graph(int (*pParam)[5]); 15 ~Graph(); 16 //深度优先遍历 17 int DeepSearch(int Point = 0); 18 void BFS(); 19 void ResetVisit(); 20 }; 22 class ListNode 23 { 24 public: 25 int val; 26 int weight; 27 ListNode * next; 28 public: 29 ListNode(); 30 }; 31 ListNode::ListNode():val(0), weight(0), next(NULL) 32 { 33 ; 34 } 35 class GraphList 36 { 37 public: 38 GraphList(); 39 ~GraphList(); 40 void AddToListByOrder(int nitem, int Point); 41 void BFS(int n = 0);//这个广度优先遍历的代码太好写了 42 private: 43 int visit[5]; 44 ListNode * Next[5]; 45 }; 46 void GraphList::AddToListByOrder(int nitem, int Point)//前插法,代码好写 47 { 48 if(nitem >= 0 && nitem = 0 && Point val = Point; 54 pnewnode->next = Next[nitem]; 55 Next[nitem] = pnewnode; 56 } 57 } 59 void GraphList::BFS(int n) 60 { 61 for(int i = 0;i val]) 72 { 73 cout val val] = 1; 75 } 76 pLNTmp = pLNTmp -> next; 77 } 78 } 79 } 81 GraphList::GraphList() 82 { 83 for(int i = 0;i next; 98 delete Next[i]; 99 Next[i] = ptmpLN;100 }101 }102 }104 void Graph::ResetVisit()105 {106 for(int i = 0;i DL;143 DL.push(4);144 while(!DL.empty())145 {146 int val = DL.front();147 DL.pop();148 for(int i = 0;i > nLineNumbers;182 while(nLineNumbers --)183 {184 cout > nItem >> Point;186 tmpGphLst.AddToListByOrder(nItem, Point);187 }188 tmpGphLst.BFS();189 cout 数据结构,—,图,的,遍历,接下来,今天,讲,

汶川地震发生前有预兆吗?

比如,有人说汶川还没发生地震的时候,有当地池塘突然干涸的异常情况发生,而就在地震来临之前的几天时间,池塘的底部出现裂缝并进一步塌陷。

地震发生之后,又出现了不少动物异常反应的说法,难道地震真的存在所谓的预兆提示吗?那为什么这么多次大型地震我们都没有完美避开?已经辟谣过很多次,地震的本质是我们脚下的地壳在释放能量,而它到底什么时候会出现这样的活动,别说我们普通人来观察周围的异常情况,就连专门的地震学家也无法做到预测地震何时发生。

即便是日本的许多地震专家提前公布的哪里可能发生地震,那也只是根据历史情况和目前的地质情况得出的一个概率值,而非具体到什么时间会发生多大震级地震。

事实上,地震的发生频率比很多人都想象的高,比如,就在今天印尼又发生了6.3级地震,我们来详细看看地震发生的一些数据说明。

6月以来,关于地震的消息可以说真不少,根据中国地震监测网数据显示,在6月23日15时43分,位于印尼北苏拉威西省附近海域又发生了一次强震,等级大小为6级(我国监测),印尼气象、气候和地球物理局网站消息的等级显示为6.3级强震,美国地质调查局显示为5.9级,这里存在差异大家参考下即可。

整体上来说这次地震的强度还是不低,按照我国地震监测网数据显示,这也是6月以来第6个强震,当然6月确实已经记录到了一次大地震,是位于新西兰克马德克群岛以南海域的7.3级大地震。

只不过也没有产生什么影响。

火山之后,地震再现所以很多人可能又在怀疑2020年是不是又是什么不正常的年份了,我们还是那句话,地震的发生是属于正常的情况,所以完全不用担心。

同时科学界暂时也没有人说最近的地球是否异常了。

不过在印尼出现这次强震之前,在6月印尼还有一个自然灾难发生,那就是位于印度尼西亚爪哇岛的默拉皮火山出现了一次强喷发,持续约7分钟。

本次喷发产生的火山灰烬达到了6000米高,可以说是非常罕见的,同时我们也知道默拉皮火山是印尼最活跃的500座火山之一,而这次火山喷发之后又来地震,可能不少人觉得地球是否真的异常了。

当然对于2020年来说,确实出现了很多难以现象的地震情况,很多自然灾难可能短时间都比较频繁,但是这也并不能说明今年是不是不正常的一年,往年的自然灾难也同样有发生的,所以完全不担心,如果地球真的出现了什么异常,或者2020年是多灾多难的一年,科学家们肯定也早就给出了一个说明,很明显如今还没有任何证据显示2020年不正常,这就是大概的情况,大家不要以短时间的情况来判断全年的情况就行。

印尼自然灾难频现正常吗?肯定是正常的,就如最近印尼发生的地震和火山,本身印尼就是属于环太平洋地震带或火山带的一部分,所以完全是属于正常的,并且科学记录之中,每年印尼都会发生大小地震数千次,完全是一个高度活跃区域,同时印尼最近的一次大地震影响是发生在2018年9月,印尼中苏拉威西省栋加拉县发生7.4级地震,并且还产生了突发性的海啸,所以印尼发生强震没有什么特别指出。

同时印尼出现地震,火山频发生完全是没有什么问题的,不过虽然本次地震没有产生多大的影响,并且也没有海啸预警,但当地地震中心已经警告震中附近有发生余震的可能,并提醒居民冷静并保持警惕。

所以说在印尼的朋友也多多注意安全吧,本身来说地震的如今在全球范围之内,与常年是一样的,都会突发性的出现,只是发生的区域和等级大小不一样。

地震在科学之中可以预测吗?我相信已经不是第1次说了,地震在科学之中是无法精确预测的,地震的发生主要是因为板块运动或者断层带滑动带来的,是地球内部自然变化过程,并且板块运动或者断层带滑动几乎是每天都在发生,所以我们无法判断这些运动的精确方向是什么,就无法知道是否会发生地震,这可能也是地震精确预测之中最难的一个问题,至少如今还没有能力去判断。

当然很多人可能会说,日美等地震机构曾多次发布某个地区发生地震的可能性有多大,但是我们也看到了是百分比的模式,其实这个数据就是根据板块运动或者断层带滑动的一些变化,结合历史性的地震数据来进行分析说明的。

同样是一个推测性的数据,所以无法也不是精确预测地震的说明。

而对于地震云,地震鱼等情况,大家如今也在讨论,科学界还是同样说明了它们与地震是没有关系的, 也找不到任何证据证明它们的联系。

所以综合情况而言,如今的地震在科学界是做不到精确预测的,地震无法预测,但是地震预警是可以提供方便的,在全球范围之中,地震预警是我们见到最多的,地震预警主要是根据地震波的传播情况来给予一个时间评估,也是建立在地震发生之后,所以大家不要将地震预警与地震预测放在一起来看,这完全是不一样的情况,地震预警一般情况可以提前几十秒发出预警,所以大家可以在这几十秒钟做出防御,未来科学界也将实施秒级预警计划,我们还是挺期待的。

整体上而言,如今我们地球发生的变化都是属于正常的模式,跟2020年也没有什么关系,如果要说异常较多的可能就是气候问题了,2020年的异常气候是比较多的,例如北极才出现了30度高温,所以大家科学看待问题就行。

动物鸟类对大地震前都有警觉。

气温,气压,地磁角偏转,地磁电荷在地震断裂带地震纵波与地震横波形成剪切力释放的能量会影响到动物,植物一切跟电和磁以生命为载体的生物群体,都会有感应。

例如癫痫病人,神经官能症病人,鸽子,蜻蜓,蚂蚁,笨狗,猪,鸡鸭,鱼在地震前四五跃出水面,,地下水的定水位起伏不定,温度不一,味感不一,甜变苦,苦变甜,天空中的云在地震六七天的云早晨与傍晚颜色呈顶红中微紫不暗黑。

预防地震最好的办法是群防群治,地震多发生在春秋二季,大地震发生前,小地震发生频率高,这时候要加一万倍小心,细心观察对地震敏感的动物,地震发生时间多在凌晨或傍晚,月球对地球起潮力最近点,也就是震中最接近月球的地方。

汶川地震一点前兆也没有吗?汶川地震有前兆吗?

汶川地震前一定是前兆的,因为地震和刮风下雨一样,都是一种自然现象,在它来临之前是有前兆的,特别是强烈地震,在孕育过程中总会引起地下和地上各种物理及化学变化,给人们提供信息。

这种自然界发生的与地震孕育和发生相关联的现象称之为地震前兆现象。

现代地震科学的深入研究表明,地震之前确实存在多种多样的前兆现象。

自1966年邢台地震以来,我国已在100多次中强以上地震前记录到2000多条前兆现象。

由于地震的孕育和发生是很复杂的自然现象,因此在这个过程中将会出现地球物理学、地质学、大地测量学、地球化学乃至生物学、气象学等多学科领域中的各种前兆现象,即地震前兆具有丰富,多样和综合的特点。

常见的地震前兆现象有: 1地震活动异常; 2地震波速度异常变化; 3地壳变形; 4地应力场异常变化; 5重力场异常变化; 6地下水物理性质异常变化; 7地下水中氡气含量或其他化学成分的异常变化; 8地电场及地球介质电阻率异常变化; 9地磁场异常变化; 10动植物异常; 11地声; 12地光等。

这些前兆现象有的很明显,人们可以通过感官觉察到;有的则很微弱,只能通过精密仪器测量出。

通常人们根据感官所能觉察的情况把这些前兆现象分为宏观前兆和微观前兆两大类。

宏观前兆虽然易于观察,但是不容易定量描述,如动物异常等;而微观前兆,需要使用复杂的仪器,不易观测,但是易于定量描述,易于找到与地震活动的关联。

鉴于微观前兆和宏观前兆的各自优缺点,因而直到目前地震前兆的捕捉仍然有很长的一段路要走。

如汶川地震就是由于种种主客观原因,在震前并没有捕捉到有效的前兆。

加入收藏
               

数据结构——图的遍历

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录