資料結構與演算法Python版第十二周OJ作業

2021-10-05 21:53:42 字數 2659 閱讀 8733

題目內容:

有 n 門課程要選,其編號分別由 0 至 n-1

每個課程都有一些需要提前學完的先修課程:例如,假設在學習課程 0 前需要先學習課程 1 ,我們用乙個先修關係對[0, 1]來表示這種 「後學習課程,先修課程」 的關係

現給定一系列課程與若干先修關係,請判斷是否存在乙個方案可以學完所有課程

輸入格式:

輸入分為兩行,第一行為乙個整數,表示課程的總數

第二行為乙個巢狀列表的python表示式,包含若干先修關係對

輸出格式:

true或false,表示是否存在乙個按照先修關係學完所有課程的順序

輸入樣例:

[[1,0],[0,1]]

輸出樣例:

false

判斷是否存在乙個按照先修關係學完所有課程的順序就是判斷課程依賴關係圖中是否不存在圈,先用乙個列表儲存每個課程是哪些課程先修課程,用乙個遞迴演算法來判斷從圖中任意頂點出發是否存在圈,遞迴運算過程中記錄已經訪問過的課程和當前路徑中的課程,如果當前路徑中的課程出現重複說明出現了圈,如果遇到已經訪問過但不在當前路徑中的課程可以直接跳過從而加速遞迴運算。

def

canfinish

(n, pre)

:if n ==0:

return

false

graph =[[

]for _ in

range

(n)]

for sub in pre:

graph[sub[1]

]0])

defiscircle

(n):

if n in path:

return

true

keys = graph[n]

if keys ==

:return

false

for key in keys:

if key in visited and key not

in path:

continue

if iscircle(key)

:return

true

path.pop(

)else

:return

false

i =0while i < n:

visited =

path =

if iscircle(i)

:return

false

i +=

1else

:return

true

n =int

(input()

)pre =

eval

(input()

)print

(canfinish(n, pre)

)

題目內容:

給定乙個二維列表表示的地圖,其中每個位置值為 1 或 0 ;1 代表該位置存在乙個伺服器,0 代表該位置為空。對每個伺服器來說,如果其所在的位置同一行或同一列有其它伺服器,就稱這個伺服器是「聯網」的。

請求出地圖上所有聯網的伺服器的總數。

輸入格式:

一行,為乙個以合法python表示式給出的二維巢狀列表

輸出格式:

一行整數

輸入樣例:

[[1,1,0,0],[0,0,1,0],[0,0,1,0],[0,0,0,1]]

輸出樣例:

用兩個列表分別儲存每一行和每一列各有多少臺伺服器,當發現當前位置存在伺服器時,就到列表中檢視該伺服器的行和列上是否存在其他伺服器。

def

netsum()

: x_list =[0

]*len(

list

) y_list =[0

]*len(

list[0

])count =

0for i in

range

(len

(list))

:for j in

range

(len

(list[0

])):

iflist

[i][j]==1

: x_list[i]+=1

y_list[j]+=1

for i in

range

(len

(list))

:for j in

range

(len

(list[0

])):

iflist

[i][j]==1

:if x_list[i]

>=

2or y_list[j]

>=2:

count +=

1return count

list

=eval

(input()

)print

(netsum(

))

Python資料結構與演算法分析(第2版)閱讀筆記

正文提取碼 fjlk 中序表示式,前序表示式,後續表示式 使用棧這種資料結構來儲存 a b c a 存入列表末端 入棧 b 存入列表末尾 入棧之前,判斷棧裡是否有高於或等於其優先順序的運算子,若有,將其彈出並存到列表末尾,把 存到列表末尾,號入棧 b 存入列表尾部帶括號的情況 a b c d e f...

資料結構與演算法 遞迴演算法(Python版)

一 整數轉換為任意進製 我們用最熟悉的十進位制分析下這個問題 十進位制有十個不同符號 convstring 0123456789 比十小的整數 轉換成十進位制,直接查表 就可以 了 convstring n 想辦法把比十大的整數,拆成一系列比十小的整 數,逐個查表,比如七百六十九,拆成 七 六 九,...

MOOC資料結構與演算法Python版 第六周測驗

1 單選 2分 下列哪個演算法使用到了分治策略?d 2單選 2分 函式值快取最適合使用哪種python中的資料型別?b 3 單選 2分 已知數列g x 滿足 根據遞推式寫出求數列值的遞迴演算法,問原始演算法與採用函式值快取的演算法時間複雜度分別為多少?a 4 單選 2分 博物館大盜問題中,若共有10...