使用廣度優先遍歷來遍歷下方的無向圖,乙個可能的輸出序列是:
分析:這道題考廣度優先搜尋,很鬱悶最近的我可能因為熬夜使得腦子轉不過來,太笨了吧,看著道題如果不說**實現的話很簡單。只要掌握了原理就好:
先看m,廣度優先可能的有
m-r-q-n-p-o
m-r-q-n-o-p
m-r-n-q-p-o
m-r-n-q-o-p
m-q-r-n-p-o
m-q-r-n-o-p
m-q-n-r-p-o
m-q-n-r-o-p
m-n-q-r-p-o
m-n-q-r-o-p
m-n-r-q-p-o
m-n-r-q-o-p
一共有3*2*1(rqn全排列)*2*1(op全排列)=12種高中老樊爺爺教過的
滿滿回憶ing
再看n開頭的:
n-m-q-o-p-r
n-m-q-o-r-p
n-m-o-q-p-r
n-m-o-q-r-p
n-q-m-o-p-r
n-q-m-o-r-p
n-q-o-m-p-r
n-q-o-m-r-p
n-o-m-q-p-r
n-o-m-q-r-p
n-o-q-m-p-r
n-o-q-m-r-p
一共有3*2*1(mqo全排列)*2*(pr全排列)=12種
再看q開頭的:
q-m-n-p-o-r
q-m-n-p-r-o(題目答案c)
q-m-p-n-o-r
q-m-p-n-r-o
q-n-p-m-o-r
q-n-p-m-r-o
q-n-m-p-o-r
q-n-m-p-r-o
q-p-n-m-o-r
q-p-n-m-r-o
q-p-m-n-o-r
q-p-m-n-r-o
一共有3*2*1(mnp全排列)*2*1(ro全排列)=12種
因此本題答案選c
下面我用python**來完成廣度優先和深度優先演算法,程式還有些問題,目前我的水平有限所以就先寫個這,後面會再改的,大體上的功能是實現了的
#-*-coding:utf-8-*-e:\python27\python.exe "d:/python/python 資料結構/graph.py"#depth_first_search
#breadth_first_search
class
graph(object):
def
__init__(self
,*args
,**kwargs):
self.node_neighbors = {}
#這是圖的頂點儲存的結構表示,也就是用字典的方法表示
#其中key值代表圖的頂點,value代表相鄰頂點,也就是這個頂點
#指向的頂點。和這個頂點連線的頂點。
self.depth_visited =
self.breath_visited =
#visit表示訪問過的頂點列表,訪問過這個定點的話就把它加進去
#這個列表裡面
def
add_nodes(self
,nodelist):
for node in
nodelist
:self.node_neighbors[node] =
#這個方法是用來新增頂點,將nodelist裡的頂點新增進去
def
add_edge(self
,edge):
u,v =
edge
if(v not in
self.node_neighbors[u]) and (u not in
self.node_neighbors[v]):
#這個方法是實現新增圖裡面的邊,也就是說如果頂點字典裡面某個
#頂點key u的value 列表裡面沒有頂點v,而且u連線了v,那麼就在
#u的value列表裡把v新增進去。同理在v的value列表裡新增u進去
def
depth_first_search(self):
order = #order是最後生成的路線圖
def
dfs(node):
for i in self.node_neighbors[node]:
if i not in self.depth_visited:
dfs(i)
for node in
self.node_neighbors.keys():
if node not in
self.depth_visited:
dfs(node)
print order
def
breath_first_search(self):
queue =
order =
def
bfs():
while
len(queue) > 0:
node = queue.pop(0)
if node not in self.breath_visited:
for n in self.node_neighbors[node]:
if (not n in self.breath_visited) and (not n in queue):
for node in
self.node_neighbors.keys():
if not node in
self.breath_visited:
bfs()
print order
g = graph()
g.add_nodes(i+
1 for i in
range(8))
g.add_edge((1
,2))
g.add_edge((1
,3))
g.add_edge((2
,4))
g.add_edge((2
,5))
g.add_edge((4
,8))
g.add_edge((5
,8))
g.add_edge((3
,6))
g.add_edge((3
,7))
g.add_edge((6
,7))
'nodes:'
,g.node_neighbors.keys()
for node,value in g.node_neighbors.items():
print node,
':', value
'the breath first search list is:'
order1 = g.breath_first_search()
'the depth first search list is:'
order2 = g.depth_first_search()
nodes: [1, 2, 3, 4, 5, 6, 7, 8]
1 : [2, 3]
2 : [1, 4, 5]
3 : [1, 6, 7]
4 : [2, 8]
5 : [2, 8]
6 : [3, 7]
7 : [3, 6]
8 : [4, 5]
the breath first search list is:
[1, 2, 3, 4, 5, 6, 7, 8]
the depth first search list is:
[1, 2, 4, 8, 5, 3, 6, 7]
process finished with exit code 0
宜信大資料資訊
1.宜信大資料是關於網際網路金融 大規模並行,資料探勘,機器學習等。2.主要產品 lain paas平台,以docker為基礎。商通貸 專為解決外貿電商資金問題而開發的網路借貸服務平台。指旺理財 一款專注於提供低門檻 高收益 安全貼心服務的移動端投資理財工具。姨搜 基於宜信金融雲的一站式風控搜尋引擎...
位元組跳動資料探勘筆試
題型 單選7道,不定項3道,程式設計3道 單選涉及linux,sql 1.怎麼解決資料傾斜 增加reduce的個數,重新設計key,有一種方案是在map階段時給key加上乙個隨機數,有了隨機數的key就不會被大量的分配到同一節點,待到reduce後再把隨機數去掉即可。使用combinner合併,co...
中信卡 資料探勘分析筆試 面經
中信卡筆試面試一站式,昨天筆試,今天面完,新鮮出爐的筆經面經分享給大家。秋招不易,碼字不易,喜歡請點贊,希望對來著有所幫助。筆試 筆試考的東西比較多,比較雜,但是整體來說都不難,考的內容包括 python sql sas 統計學 機器學習 深度學習。看起來很恐怖,其實每個部分考的都比較簡單,偏基礎。...