本章學習了圖結構的的相關知識,相對於樹各有各的難點,樹更多的遞歸,圖更相似於一個二維結構,圖屬於複雜的非線性數據結構,在實際應用中有不少問題能夠用圖來描述,好比網絡,在圖形結構中,每一個元素能夠有零個或者多個前驅元素,也能夠有零個或者多個後繼元素,元素之間的關係是多對多的,相對於以前的學習,圖的基本術語更加複雜。經常使用的圖的存儲結構有鄰接矩陣和鄰接表,鄰接矩陣就是用二維數組來表示,而鄰接表則是定義三個結構體組成的圖結構。鄰接矩陣更使用於稠密圖,鄰接表更適用於稀疏圖。
須要記錄層數,僅計算6層之內的結點數算法
int BFS(vertex V) { visited[V]=true; count=1; level=0; last=v; while(隊列不爲空) { x=出隊列; for(x的每一個鄰接點w) { if沒有被訪問 { visited[w]=true; w進隊列; count++; tail=w; } if(訪問到該層最後一個元素) { level++; last=tail; } if(層數level=6)break; } 返回count }
其實就是公路村村通的進一步複雜題,這裏給的是二維數組輸入因此輸入方式要用雙重for循環,而後將值做爲公路的花費,運用最小生成樹這裏把訪問過的設置爲-1,已經建好的路且未被訪問花費設置爲0便可
將各個公路長度輸入g[max][max]; 輸入公路(x,y)並將其置爲0; 定義cost數組; for(遍歷全部城市) { 更改全部城市到起始城市1的花費; } 起始城市1的花費cost[1]=-1; 定義sum記錄總花費置爲0; for(遍歷n-1次,把剩下的城市都加入) { 每次循環min重置32768,K=-1; for(遍歷全部城市) { 用if語句在沒有訪問過的城市找出最小花費; 同時k記錄最小花費的城市; } if(存在最小花費的城市) { sum+=找到的最小花費; cost[k]=-1以訪問過; for(訪問全部城市) { 修改cost數組; } } 輸出sum;
編譯錯誤由於vs貌似過大的二維數組會溢出,把棧容量修改便可,或者放到全局變量具體爲何也不是很清楚。。。數組
定義三個數組edges來記錄邊,color記錄各個頂點的顏色,利用vis判斷顏色數量,由於每行順次給出V個頂點的顏色(第i個數字表示第i個頂點的顏色)因此能夠只用判斷每次輸入的時候標號比他小的全部的直接聯通的點兩點間的顏色。
for循環初始化圖 輸入n; for(i=0到i<n) { 初始化flag,num爲0; 初始化vis數組爲0; for(遍歷全部頂點) { 輸入color[j]; if(該顏色沒有出現過) { vis該顏色置爲1; num++; ] if(flag爲0同時顏色數量沒有超出限制) { for(遍歷標號比他小的全部的直接聯通的點) { if(出現相同顏色)flag=1; } } if(出現相同顏色或者顏色過多)輸出No; else輸出Yes; }
錯了這兩題緣由一個是時間確實不夠,只能把特殊狀況輸出,再者就是熟練度不夠其餘題目浪費了不少時間,由於devc指針指不出來也是很難受。