-
頂點:??
頂點索引? ? ? ? ? ? ? ?出弧鏈表頭指針? ? ? ? ? ? ? ? ? ? ? ? ?頂點數(shù)據(jù)
? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
頂點索引? ? ? 第一個出弧的指針(可以是NULL)? ? ? ? ?頂點數(shù)據(jù)
弧的表示方法:
弧頭頂點索引? ? ? ? ? ? ? ? 下一條弧指針? ? ? ? ? ? ? ? ? 弧數(shù)據(jù)
????? ? ?|? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
弧頭頂點(指向的點)? ? ? ? 一個點有多個弧? ? ? ? ? ? ? 弧數(shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?每個弧保存下一條弧的指針
查看全部 -
鄰接表表達(dá)圖:
查看全部 -
頂點和圖:
頂點保存點的索引和數(shù)據(jù)
圖保存頂點數(shù)組和鄰接矩陣
查看全部 -
鄰接矩陣方法:
查看全部 -
圖->數(shù)據(jù)
圖的存儲結(jié)構(gòu):
????鄰接矩陣(數(shù)組)
????鄰接表(鏈表)-->存儲有向圖
????十字鏈表(鏈表)-->存儲有向圖
????鄰接多重表(鏈表) -->無向圖
查看全部 -
【圖的遍歷】深度優(yōu)先搜索(前序遍歷)、廣度優(yōu)先搜索(一層一層搜索)
【最小生成樹】普里姆Prim算法、克魯斯卡爾Kruskal算法
1、Prim算法
點集合
邊集合
待選邊集合
2、Kruskal算法
待選邊集合
已選邊集合
已涉及點集合
查看全部 -
1、十字鏈表-鏈?zhǔn)酱鎯?/p>
頂點的表示:頂點索引+頂點數(shù)據(jù)+以該頂點為弧尾的弧節(jié)點指針+以該節(jié)點為弧頭的弧節(jié)點指針
?。夯∥岔旤c索引+弧頭頂點索引+弧尾相同的下一條弧的指針+弧頭相同的下一條弧的指針+弧的數(shù)據(jù)
struct Arc{弧尾頂點索引;弧頭頂點索引;指向下一條弧頭相同的弧的指針;指向下一條弧尾相同的弧的指針;弧的數(shù)據(jù);}
struct Node{頂點索引;頂點數(shù)據(jù);第一條入弧節(jié)點指針;第一條出弧節(jié)點指針;}
struct Map{頂點數(shù)組;}
2、鄰接多重表-鏈?zhǔn)酱鎯Γo向圖)
頂點:頂點索引+連接該頂點的邊+頂點數(shù)據(jù)
邊:A頂點索引+B頂點索引+與A頂點相連接的下一條邊的指針+與B頂點相連接的下一條邊的指針+邊的數(shù)據(jù)
struct Edge{頂點A索引;頂點B索引;連接A的下一條邊的指針;連接B的下一條邊的指針;邊信息;}
struct Node{頂點索引;頂點數(shù)據(jù);第一條邊節(jié)點的指針;}
struct Map{頂點數(shù)組;}
查看全部 -
【圖的存儲結(jié)構(gòu)】鄰接矩陣(用數(shù)組表達(dá))、鄰接表(鏈表,有向圖)、十字鏈表(鏈表,有向圖)、鄰接多重表(鏈表,用于表達(dá)無向圖)
【權(quán)值】弧/邊上的數(shù)據(jù)(比如兩個城市之間的某條公路是300km)
1、鄰接矩陣
頂點的表示:頂點索引+頂點數(shù)據(jù)
有弧的用1表示,沒有弧的用0表示,自己和自己用0
int matrix[4][4];
struct Node{頂點索引;頂點數(shù)據(jù);}
struct Map{頂點數(shù)組;鄰接矩陣;}
2、鄰接表-鏈?zhǔn)酱鎯?/p>
頂點的表示:頂點索引+出弧鏈表頭指針+頂點數(shù)據(jù)
?。?span >弧頭頂點索引+下一條弧指針+弧數(shù)據(jù)
逆鄰接表:記錄的是 入弧鏈表頭指針 和 弧尾頂點索引
struct Node{頂點索引;該頂點弧鏈表的頭結(jié)點;頂點數(shù)據(jù);}
struct Arc{指向的頂點索引;指向下一條弧的指針;弧信息;}
struct Map{頂點數(shù)組;}
查看全部 -
【圖】無向圖、有向圖
【有向圖】每個節(jié)點都叫做“頂點”,頂點之間的有方向的連線叫做“弧”
方向箭頭的尾端:弧尾
方向箭頭的頭端:弧頭
某個頂點發(fā)射出去的箭頭數(shù):出度(數(shù))
某個頂點接受到的箭頭數(shù):入度(數(shù))
【無向圖】節(jié)點為“頂點”;節(jié)點間的連線是無方向的(即可以看做雙向的),叫做“邊”;由邊連接的兩個頂點為鄰接點
連通圖:每個頂點都有通往其他頂點的連線(直接/間接)
完全圖:任意頂點都與其他頂點有直接的連線,邊數(shù)=n(n-1)/2
生成樹:最少數(shù)量的邊連接每一個頂點,邊數(shù)=n-1
查看全部 -
結(jié)構(gòu)體定義查看全部
-
鄰接表與逆鄰接表:
頂點:頂點索引,出弧鏈表頭指針,頂點數(shù)據(jù);
弧:弧頭頂點索引,嚇一跳弧指針,弧數(shù)據(jù)
查看全部 -
頂點結(jié)構(gòu)體:包括頂點索引和頂點數(shù)據(jù);
圖的結(jié)構(gòu)體:包括頂點數(shù)組和鄰接矩陣
查看全部 -
頂點結(jié)構(gòu)體:包括頂點索引和頂點數(shù)據(jù)就行 圖的結(jié)構(gòu)體:包括頂點數(shù)組(記錄頂點)和鄰接矩陣(記錄邊,并且頂點和邊的關(guān)系)就行 鄰接表與逆鄰接表:相對于弧的出入頂點說的,如果存儲的是弧出頂點的就是鄰接表,如果存儲的是弧進(jìn)頂點就是逆鄰接表
查看全部 -
不用看第二遍
查看全部 -
/** *?廣度優(yōu)先遍歷 (java實現(xiàn)) */ public?void?breadthFirstTraverse(int?nodeIndex)?{ System.out.print(NodeArray[nodeIndex].date+"??"); NodeArray[nodeIndex].isVistited?=?true; Vector<Integer>?v1?=?new?Vector<Integer>(); v1.add(nodeIndex); breadthFirst(v1); } public?void?breadthFirst(Vector<Integer>?v1)?{ int[]?value?=?new?int[1]; Vector<Integer>?v2?=?new?Vector<Integer>(); for(int?j?=?0;?j?<?(int)v1.size()?;?j++)?{ ????for(int?i?=?0;?i?<?Capacity?;?i++)?{ ????????getValueFromMatrix(v1.get(j),?i,?value); ????????if(value[0]?!=?0)?{ ???? ????if(NodeArray[i].isVistited)?{ ???? ????????continue; ???? ????}else?{ ???? ????????System.out.print(NodeArray[i].date+"??"); ???? ????????NodeArray[i].isVistited?=?true; ???? ????????v2.add(i); ???? ????} ????????} ????} ?????} ?????if(v2.size()?==?0)?{ ?????????return; ?????}else?{ ?????????breadthFirst(v2); ?????} }
查看全部
舉報