view code
/*【題目**】
&cid=567
【題目分析】
與longth way 類似
這個好象就是傳說中的六度人脈,你只要通過六度人脈就可以找到世界上的任何乙個人。
假設乙個人一生會認識n個人,那n+n^1+n^2+n^3+n^4+n^5+n^6>=世界總人數。
給定一些邊確定乙個圖,即給定一些點之間的連通情況,求出各點到0的最短路徑
【思路分析】
1.鄰接表構圖
2.以0為樹根,層次遍歷,求出其他各點的深度 即為所求
【小小心得】
剛開始還去用struct表示node
其實只用乙個鄰接表就行了 鄰接表果然好東西呀~
*/#include
#include
#include
using
namespace
std;
#define max 101
intmain()
int layer[max] = ;//
深度 bool visit[max] = ;//
是否被訪問過
queue
q;q.push(0);
while (!q.empty())}}
for (int i = 1; i < max; ++i)
if (layer[i]) cout << i << ":"
<< layer[i] <
cout
<< "
---"
<}}
view code
/*受ry提示,此題有一種比較容易敲出來的演算法,於是考試的時候就用了這種哈哈。
第二種思路:floyd-warshall演算法(它真的叫猥瑣演算法嗎??)
floyd-warshall演算法是解決任意兩點間的最短路徑的一種演算法。
通常可以在任何圖中使用,包括有向圖、帶負權邊的圖。
複雜度比bfs的要高 o(n^3)
思路很容易,3個迴圈尋找任意兩點間的最小值。
【小小心得】
除非是對陣列清零,否則不要輕易用memset.
*/#include
using
namespace
std;
#define max 101
ints[max][max];
intmain()
//floyd-warshall演算法特徵: 3個迴圈
for (int k = 0; k < max; ++k)}}
}//輸出其他各點到0的距離
for (int i = 1; i < max; ++i)
cout
<< "
---"
<}}
The Longest Path 兩種解法
view code 題目 cid 567 題目分析 給定一些邊確定乙個圖,即給定一些點之間的連通情況,保證給定的圖沒有迴路,要求輸出該圖存在的最長路徑。思路分析 根據給定資訊構造圖,用鄰接表表示。鄰接矩陣明顯很麻煩且效率不高 將每乙個頂點看成是樹根,求出樹的高度。得到一系列樹的高度,最大的那個就是圖...
FBI樹兩種解法
問題描述 我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,既含 0 又含 1 的串則稱為f串。fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2n的 01 串s可以構造出一棵fbi樹t,遞迴的構造方法如下 1 t的根結點為r,其型...
八皇后的兩種解法
public class eightqueue return true 遞迴解法 public int cal int i if x i 8 i 8 遞迴到了最後乙個地方 尋找到了合適位置,向下一列尋找位置 else if i 8 x i 8 else 非遞迴解法 public int calcul...